今天我安装了Xcode 9,并将我的项目转换为Swift 4.0。 令人惊讶的是,我的代码只需做很少的改动就可以兼容新的Swift。 然而,构建后出现一个警告:

The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and disable Swift 3 @objc inference.

这里记录了我如何去掉这个警告:

  1. 在项目导航栏单击项目
  2. 选择目标(target)
  3. 点击Build Settings
  4. 在搜索框输入“inference”,快速找到设置
  5. 最后把“Swift 3 @objc Inference”设置为“Default”,重新构建项目

“Swift 3 @objc Inference”设置是做什么的?

在Swift 4之前,编译器对Objective-C自动提供了一些Swift声明。 例如,编译器会为NSObject子类的所有方法创建Objective-C入口点。 该机制称为@objc推断(@obj Inference)。

在Swift 4中,这种自动@objc推断已被废弃,因为生成所有这些Objective-C入口点有代价。 当“Swift 3 @objc Inference”设置为“On”时,它允许旧代码运行。 但是,它会提示这些需要解决的弃用警告,建议“修复”这些警告,并将设置切换到“Default”。新的Swift项目的默认为“Default”。

示例一:Swift 4之前

这段代码在Swift 4之前是有效的,因为方法foo自动暴露给Objective-C:

class MyClass: NSObject {func foo() {}func test() {var cl: AnyObjectcl = MyClass()cl.foo?() // Swift 4之前没有问题}
}

示例二:Swift 4

试试在Swift 4中运行相同的代码:

class MyClass: NSObject {func foo() {}func test() {var cl: AnyObjectcl = MyClass()cl.foo?() // Error: Value of type 'AnyObject' has no member 'foo'}
}

现在编译器显示一个错误,因为foo方法不再可以从Objective-C获得。 为方便起见,Swift 4代码迁移将“Swift 3 @objc Inference”设置为“On”,这使得我们的代码编译时出现以下警告:

Reference to instance method 'foo()' of 'MyClass' depends on '@objc' attribute inference deprecated in Swift 4.

让类成员可以在Objective-C里使用

如果我们想要从Objective-C访问声明,我们可以使用@objc注释标记个别成员:

class MyClass : NSObject {@objc func foo() { } // 这个方法可以在Objective-C访问到func bar() { } // 但这个方法不行
}

或者,如果我们希望类的所有成员都暴露于Objective-C,可以使用@objcMembers注释来标记该类:

@objcMembers // 所有的类成员都暴露于Objective-C
class MyClass : NSObject {func foo() { }func bar() { }
}

参考

  • Limiting @objc inference Swift proposal.
  • An answer on Stack Overflow.
  • 转载请注明:文章转载自 码经笔记 [https://majing.io]

    本文链接:https://majing.io/posts/10000001351160

    版权声明:本文内容由互联网用户贡献,著作权归作者所有。

原文: Disabling Swift 3 @objc inference in Xcode 9


禁用Xcode 9的Swift 3 @objc推断相关推荐

  1. Xcode Instruments调试swift入门教程

    无论您是在许多iOS应用程序上工作,还是仍在开始使用第一个应用程序:您无疑会想出新功能,并且想知道您可以做些什么来使您的应用程序更加出色 除了通过添加功能改进您的应用程序之外,所有优秀的应用程序开发人 ...

  2. ios开发--用Xcode 8和Swift 3 构建条形码和二维码识别器

    原文:Building a Barcode and QR Code Reader in Swift 3 and Xcode 8 作者:SIMON NG 译者:CocoaChina-Fairy-happ ...

  3. Foxit Mobile PDF SDK 入门级(1)-显示一个PDF-Swift工程中的使用(Xcode 7.x, swift 2.x)

    Swift 渐渐流行,Foxit的SDK是不是可以在Swift中很好的使用呢?答案当然是可以的啦. SDK的下载申请: 英文网站: http://www.foxitsdk.com/products/m ...

  4. MacOS Xcode与Swift版本对应关系

    Swift4 Xcode9.0  or later           macOS 10.12.6+ Xcode 9.4.1                       macOS 10.13.2+ ...

  5. 如何在'纯'Swift中创建弱协议引用(不带@objc)

    本文翻译自:How can I make a weak protocol reference in 'pure' Swift (without @objc) weak references don't ...

  6. swift 3 和 xcode 8

    Swift 3 beta版 作为Xcode 8 的一部分发布,其包含了许多增强功能,很多功能是由开源组织提供的.swift 3 的主要目标是让最新的主要资源改变时必要的可以允许swift语言合并贯穿并 ...

  7. Xcode 12 Beta 3 更新记录SwiftUI2

    Xcode 12 Beta 3发行说明 更新您的应用程序以使用新功能,并针对API更改测试您的应用程序. 总览 Xcode 12 beta 3包括适用于iOS 14,iPad OS 14,tvOS 1 ...

  8. 翻译Raywenderlich 最新文章What’s New in Swift 4

    Swift学习交流群: 313838956 . 本群由Guards翻译组创建并维护, 志于给认真想学习Swift的同学打造一个良好的交流圈子. 同时群内会不间断分享Swift的资料, 如果你想学习Sw ...

  9. Module System of Swift (简析 Swift 的模块系统)

    原文地址: http://andelf.github.io/blog/2014/06/19/modules-for-swift/ Swift 中模块是什么?当写下 Swift 中一句 import C ...

最新文章

  1. 开发Eclipse自定义控件
  2. How to call DLL and LIB files (SDK)
  3. php 数组键值分离,array_keys array_values::PHP数组键名于键值分离
  4. ASP.NET中 DropDownList+DetailsView(详细视图)的使用前台绑定
  5. 调试Excel VBA代码
  6. 书评:JBoss AS 7:配置,部署和管理
  7. 有向图的拓扑排序算法JAVA实现
  8. 未定义标识符 stringc/c++(20)_拓展巩固练习(2020.5.20)
  9. 深圳车联网云服务商“麦谷科技”获5000万Pre A轮融资
  10. 侧方、s弯道、坡起相关
  11. 项目经理的10条规则
  12. centos 安装 libiconv
  13. Dreamweaver/Flash CS4安装后打开时提示此产品的许可已停止工作
  14. Git 学习笔记——管理员篇
  15. 1156 Sexy Primes (20 分)(质数 模拟
  16. PMOS双电源供电隔离电路(USB接入为电池充电 电池断开供电)
  17. vue3使用swiper+animate.css动效
  18. ROX-Filer 2.6
  19. 数据库-差集交集并集
  20. 7-7 厘米换算英尺英寸 (10分)

热门文章

  1. 徐州矿大计算机考研考什么,矿大北京考研考什么
  2. centos linux安装vsftp,CentOS安装vsftp最新版本
  3. 树莓派Linux关机
  4. 单视频播放量超20万的公开课配套教材,猫书来了~
  5. 传球问题(思维+数学推理)
  6. Kamiya丨Kamiya艾美捷抗FLAG多克隆说明书
  7. java技能如何炫技
  8. 不忘初心,扬帆起航!
  9. 2020年中国红人经济商业模式
  10. 1.4语言媒介的选用2