“NSLinguisticTag”类型的值没有成员“范围”
Posted
技术标签:
【中文标题】“NSLinguisticTag”类型的值没有成员“范围”【英文标题】:Value of type 'NSLinguisticTag' has no member 'range' 【发布时间】:2018-02-01 23:33:13 【问题描述】:我有文本方向代码,它在 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
有人知道如何解决这个问题吗?谢谢
【问题讨论】:
【参考方案1】:从 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 ...
【讨论】:
以上是关于“NSLinguisticTag”类型的值没有成员“范围”的主要内容,如果未能解决你的问题,请参考以下文章
“任何”的值类型没有成员 'objectforKey' Swift 3 转换
Swift 3 - 'Any?' 类型的值没有成员“valueForKey”
“String”类型的值没有成员“stringByAppendingPathComponent”[重复]
Xcode 13:`'NSPersistentCloudKitContainerOptions' 类型的值没有成员'databaseScope'`