Swift 如何纠正NSLinguisticTagger函数中的错误“;类型';字符串';没有成员';令牌类型'&引用;在Mac OSX上(功能在iOS上工作)?
我正在Mac OSX 10.13.6上使用Swift处理自然语言文本,但出现错误“Type'String'没有成员'tokenType' 为了简化,我将代码剥离,并使用苹果文档中的代码获得相同的结果。该代码在iOS 12.0和iOS 11.4上编译良好,但在Mac OSX(10.14、10.13或10.10)上编译不好 这就是问题所在。其他一切都很好:Swift 如何纠正NSLinguisticTagger函数中的错误“;类型';字符串';没有成员';令牌类型'&引用;在Mac OSX上(功能在iOS上工作)?,swift,Swift,我正在Mac OSX 10.13.6上使用Swift处理自然语言文本,但出现错误“Type'String'没有成员'tokenType' 为了简化,我将代码剥离,并使用苹果文档中的代码获得相同的结果。该代码在iOS 12.0和iOS 11.4上编译良好,但在Mac OSX(10.14、10.13或10.10)上编译不好 这就是问题所在。其他一切都很好: let tagger = NSLinguisticTagger(tagSchemes: [.tokenType], options: 0) 所
let tagger = NSLinguisticTagger(tagSchemes: [.tokenType], options: 0)
所以我也试过这个:
let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagScheme.tokenType], options: 0)
但是仍然得到了错误。我做错了什么
我检查了其他答案,如
哪个推荐进口基金会?我已经在做了。其他人建议对操作系统版本进行更改,这就是我关注的原因
我使用的是Xcode 10.5(beta版),但在使用Xcode 9.4.1时也有错误。如果有必要,我的mac电脑只使用英语。您的问题在于
枚举标签(in:,unit:,scheme:,options:)
,因为它可以从IOS 11中获得,请参见中的此处
我很难过地报告,在做出改变后,我仍然有这个问题。我的部署目标是macOS 10.13。还有什么我可以试试的吗?我做错了什么?在定义tagger的行上也出现了相同的错误。@Marcy除了这个答案中指出的问题外,我无法重现任何问题。你能发布一个示例项目吗?我把这个项目放在这里有一点背景,这个项目是来自Exercism.IO的一个使用TDD的练习。因此,我不是100%清楚为什么这个项目是这样设立的。但我在过去的练习中没有遇到任何问题。马特和施汗感谢你们的投入,因为这促使我更仔细地检查项目设置。该项目的项目格式设置为Xcode 3.2兼容性,在构建设置中,Swift语言版本设置为Swift 3。将这些更改为当前版本解决了此错误。
let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagScheme.tokenType], options: 0)
import Foundation
struct Wordy {
func parseWords(text: String) {
let tagger = NSLinguisticTagger(tagSchemes: [.tokenType], options: 0)
tagger.string = text
let range = NSRange(location: 0, length: text.utf16.count)
let options: NSLinguisticTagger.Options = [.omitPunctuation, .omitWhitespace]
if #available(iOS 11.0, *) {
tagger.enumerateTags(in: range, unit: .word, scheme: .tokenType, options: options) { _, tokenRange, _ in
let word = (text as NSString).substring(with: tokenRange)
print(word)
}
} else {
// Fallback on earlier versions
tagger.enumerateTags(in: range, scheme: .tokenType, options: options) { (tag, tokenRange, sentenceRange, stop) in
let word = (text as NSString).substring(with: tokenRange)
print(word)
}
}
}
}