Sam*_*Sam 3 swift nslinguistictagger swift4
我有文本方向代码,它在 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
}
Run Code Online (Sandbox Code Playgroud)
有人知道怎么修这个东西吗?谢谢
从 Swift 4 开始,NSLinguisticTagger标签不是作为(可选)字符串返回,而是作为(可选)值返回NSLinguisticTag:
public struct NSLinguisticTag : RawRepresentable, Equatable, Hashable {
public init(_ rawValue: String)
public init(rawValue: String)
}
Run Code Online (Sandbox Code Playgroud)
您将获得具有以下rawValue属性的基础字符串:
if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) {
print(lang.rawValue)
if lang.rawValue.hasPrefix("he") { ... }
}
Run Code Online (Sandbox Code Playgroud)
如果您想检查相等性而不是包含性,那么您还可以定义自己的NSLinguisticTag常量:
extension NSLinguisticTag {
static let hebrew = NSLinguisticTag("he")
}
Run Code Online (Sandbox Code Playgroud)
并将它们用作
if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) {
if lang == .hebrew { ... }
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是定义自定义计算属性
extension NSLinguisticTag {
var isRightToLeft: Bool {
return rawValue.hasPrefix("he") || rawValue.hasPrefix("ar")
}
}
Run Code Online (Sandbox Code Playgroud)
并将其用作
if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) {
if lang.isRightToLeft { ... }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |