我使用的是Xcode8和Swift 3.0。此错误消息是什么意思?
% ld:警告:某些对象文件具有不兼容的Objective-C类别定义。某些类别元数据可能会丢失。所有包含Objective-C类别的文件都应该使用相同的编译器构建。
发布于 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不可用,因此警告消失。
发布于 2016-10-11 18:37:01
在我的例子中,原因是在扩展中具有计算类型属性:
extension NSParagraphStyle {
class var defaultStyle: NSParagraphStyle {
return ...
}
}
不确定这背后的确切原因,但为了消除警告,我必须将计算类型属性(class var
)转换为类型方法(class func
):
extension NSParagraphStyle {
class func defaultStyle() -> NSParagraphStyle {
return ...
}
}
发布于 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)
}
https://stackoverflow.com/questions/39665979
复制相似问题