Xcode 8 Objective-C category warning
I also had this issue in a UIColor
extension, my app is entirely made with swift except for some frameworks that use Objective-c so I have no problem in declaring the var
as @nonobjc
:
extension UIColor { @nonobjc static var lol: UIColor { return UIColor.red }}
From the apple docs:
The nonobjc attribute tells the compiler to make the declaration unavailable in Objective-C code...
Since this code is unavailable to Objective-C the warning disappears.
In my case, the reason was having computed type property in an extension:
extension NSParagraphStyle { class var defaultStyle: NSParagraphStyle { return ... }}
Not sure what the exact reason behind this is, but to get rid of the warning I had to convert the computed type property (class var
) to a type method (class func
):
extension NSParagraphStyle { class func defaultStyle() -> NSParagraphStyle { return ... }}
This warning appeared in my project after adding a framework that used Objective-C in my application that otherwise used Swift 3 entirely.
By declaring all static functions and static variables in all extensions as @nonobjc
this warning went away.
For example
extension Notification.Name { @nonobjc static let MyNotificationName = Notification.Name("NNSongFavoriteStatusDidChangeNotification")}
or
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)}