在 Swift 3.2 项目中实现 NSLinguisticTagger 时出现 ‘no member nameType’ 错误

我在 macOS 的 Swift 3.2 项目中尝试使用 NSLinguisticTagger。

以下代码在 Swift 4 中运行良好

let tagger = NSLinguisticTagger(tagSchemes: [.nameType], options: 0) // 已编辑

但在 Swift 3.2 项目中会出现以下错误:

类型 ‘String’ 没有成员 ‘nameType’ // 已编辑

enter image description here

我在 Swift 3.2 项目中尝试按照旧的 NSLinguisticTagger 教程操作,但找不到 ‘.name’ 部分的替代方案。是否有办法修复这个问题,还是我必须将项目更新到 Swift 4?

NSLinguisticTagger 文档

NSHipster NSLinguisticTagger 2012 教程


回答:

首先,我需要道歉,因为我最初在没有确认我的设置是否真的正确的情况下写了一个答案。以下描述是基于我认为正确的设置更新的。(Xcode 9.2,目标 Swift 版本设置为 3.2。更改项目 Swift 版本不会影响目标 Swift 版本,哦,我的耻辱…)


当你想要使用旧版本的 Swift 时,一些 Swift 友好的包装类型不可用,API 和常量是从 Objective-C 世界以简单规则导入的。在这种情况下,你需要根据这些规则重新解释 Objective-C 版本的引用。

NSLinguisticTagScheme

正如你在上面的链接文章中看到的,NSLinguisticTagScheme 只是 String 的类型别名,常量被命名为 NSLinguisticTagSchemeNameType,如你问题链接中的文章所示。它们在旧版本的 Swift 中按原样导入。

因此,这在 Swift 3.2 中可以编译:

let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagSchemeNameType], options: 0)

(尽管如此,我强烈建议你升级到 Swift 4。因为苹果的官方参考资料是基于最新版本的 Swift,即 Swift 4。)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注