简单地说,在使用Xcode 9 Beta时,我遇到了以下警告:
不建议在Swift 4模式中使用Swift 3 @objc推断。请解决已弃用的@objc推断警告,测试代码时启用“使用已弃用的Swift 3 @objc推断”日志记录,并禁用Swift 3 @objc推断。**
经过一番研究,我仍然不知道如何解决这个问题。 我将非常感谢任何关于如何解决这个问题的提示,以及对正在发生的事情的解释。
我的目标是更好地理解我的代码发生了什么。
简单地说,在使用Xcode 9 Beta时,我遇到了以下警告:
不建议在Swift 4模式中使用Swift 3 @objc推断。请解决已弃用的@objc推断警告,测试代码时启用“使用已弃用的Swift 3 @objc推断”日志记录,并禁用Swift 3 @objc推断。**
经过一番研究,我仍然不知道如何解决这个问题。 我将非常感谢任何关于如何解决这个问题的提示,以及对正在发生的事情的解释。
我的目标是更好地理解我的代码发生了什么。
当前回答
我是一个偶尔的iOS开发者(很快就会更多),但我仍然无法找到其他答案所引导的设置(因为我没有答案所显示的钥匙链项目),所以现在我找到了它,我想我可以添加这个快照,突出显示你需要点击并找到的位置。
从左上方开始 选择项目文件夹图标 选择项目文件夹图标下面的主项目名称。 在右侧选择Build Settings。 在TARGETS下面选择您的项目。 向下滚动(或在搜索中搜索单词推理) 文本框)
其他回答
我摆脱了这个警告通过改变“Swift 3 @objc推断”构建设置我的目标为“默认”。
从这篇文章中:
Before Swift 4, the compiler made some Swift declarations automatically available to Objective-C. For example, if one subclassed from NSObject, the compiler created Objective-C entry points for all methods in such classes. The mechanism is called @objc inference. In Swift 4, such automatic @objc inference is deprecated because it is costly to generate all those Objective-C entry points. When "Swift 3 @objc Inference" setting is set to "On", it allows the old code to work. However, it will show deprecation warnings that need to be addressed. It is recommended to "fix" these warnings and switch the setting to "Default", which is the default for new Swift projects.
更多信息请参考Swift提案。
在Swift 4模式下使用Swift 3 @objc推断已弃用?
使用func调用@objc
func call(){
foo()
}
@objc func foo() {
}
我是一个偶尔的iOS开发者(很快就会更多),但我仍然无法找到其他答案所引导的设置(因为我没有答案所显示的钥匙链项目),所以现在我找到了它,我想我可以添加这个快照,突出显示你需要点击并找到的位置。
从左上方开始 选择项目文件夹图标 选择项目文件夹图标下面的主项目名称。 在右侧选择Build Settings。 在TARGETS下面选择您的项目。 向下滚动(或在搜索中搜索单词推理) 文本框)
我有这个警告“Swift 3 @objc Inference”=“默认”设置。然后我意识到这是为项目设置的,而不是为目标设置的。所以,确保你在目标中有“默认”设置,以消除警告。
你只需要运行一个测试,等待完成,之后进入构建设置,搜索到构建设置推理, 将swift 3 @objc Inference更改为(默认)。我就是这么做的,而且效果很好。