[英]Value of type 'NSLinguisticTag' has no member 'range'
我有文本方向代碼,可以在Swift 3上正常工作,但是在遷移到Swift 4之后,出現了錯誤
let tagScheme = [NSLinguisticTagScheme.language]
let tagger = NSLinguisticTagger(tagSchemes: tagScheme, options: 0)
tagger.string = self.text
let lang = tagger.tag(at: 0, scheme: NSLinguisticTagScheme.language,
tokenRange: nil, sentenceRange: nil)
if lang?.range(of: "he") != nil || lang?.range(of: "ar") != nil { //Value of type 'NSLinguisticTag' has no member 'range'
self.textAlignment = NSTextAlignment.right
} else {
self.textAlignment = NSTextAlignment.left
}
有人知道怎么修這個東西嗎? 謝謝
從Swift 4開始, NSLinguisticTagger
返回的標簽不是(可選)字符串,而是NSLinguisticTag
(可選)值:
public struct NSLinguisticTag : RawRepresentable, Equatable, Hashable {
public init(_ rawValue: String)
public init(rawValue: String)
}
您將獲得帶有rawValue
屬性的基礎字符串:
if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) {
print(lang.rawValue)
if lang.rawValue.hasPrefix("he") { ... }
}
如果要檢查相等性而不是包含性,則還可以定義自己的NSLinguisticTag
常量:
extension NSLinguisticTag {
static let hebrew = NSLinguisticTag("he")
}
並將它們用作
if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) {
if lang == .hebrew { ... }
}
另一個選擇是定義自定義計算屬性
extension NSLinguisticTag {
var isRightToLeft: Bool {
return rawValue.hasPrefix("he") || rawValue.hasPrefix("ar")
}
}
並用作
if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) {
if lang.isRightToLeft { ... }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.