首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xcode 8 Objective-C类别警告

Xcode 8 Objective-C类别警告
EN

Stack Overflow用户
提问于 2016-09-24 00:58:13
回答 8查看 12.1K关注 0票数 61

我使用的是Xcode8和Swift 3.0。此错误消息是什么意思?

% ld:警告:某些对象文件具有不兼容的Objective-C类别定义。某些类别元数据可能会丢失。所有包含Objective-C类别的文件都应该使用相同的编译器构建。

EN

回答 8

Stack Overflow用户

发布于 2016-11-26 04:10:05

我在UIColor扩展中也遇到了这个问题,除了一些使用Objective-c的框架之外,我的应用程序完全是用var编写的,所以我可以毫不费力地将@nonobjc声明为swift

extension UIColor {
   @nonobjc static var lol: UIColor {
      return UIColor.red
   }
}

来自苹果文档:

非code属性告诉编译器使声明在Objective-C代码中不可用...

由于此代码对Objective-C不可用,因此警告消失。

票数 40
EN

Stack Overflow用户

发布于 2016-10-11 18:37:01

在我的例子中,原因是在扩展中具有计算类型属性:

extension NSParagraphStyle {
    class var defaultStyle: NSParagraphStyle {
        return ...
    }
}

不确定这背后的确切原因,但为了消除警告,我必须将计算类型属性(class var)转换为类型方法(class func):

extension NSParagraphStyle {
    class func defaultStyle() -> NSParagraphStyle {
        return ...
    }
}
票数 22
EN

Stack Overflow用户

发布于 2017-02-03 03:45:36

在我的应用程序中添加了一个使用Objective-C的框架后,这个警告出现在我的项目中,否则它将完全使用Swift 3。

通过声明所有静态函数和静态变量 in all extensions as @nonobjc,这个警告消失了。

例如

extension Notification.Name {
    @nonobjc static let MyNotificationName = Notification.Name("NNSongFavoriteStatusDidChangeNotification")
}

extension UIColor {
    @nonobjc static let superGiantRed = UIColor(red: 180.0/255.0, green: 40.0/255.0, blue: 27.0/255.0, alpha: 1.0)
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39665979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档