我刚刚从swift 2升级到swift 3,我遇到了覆盖属性的一些问题。
在swift 2中,您可以像这样设置活动类型
display:inline-block
然而在swift 3中(在Xcode 8 beta 6中)他们引入了NS_STRING_ENUM,现在我们覆盖了像这样的activityType
override func activityType() -> String? {
return "com.a.string"
}
问题是Xcode会抱怨这个: 属性不能是@objc覆盖,因为它的类型不能在Objective-C
中表示我找到的一个解决方案是将注释@nonobjc添加到它中:
override var activityType() -> UIActivityType? {
return UIActivityType.customActivityType
}
虽然这有助于消除错误,但此属性永远不会被调用... 这是一个问题,因为当用户完成活动并且调用了completionWithItemsHandler()时,活动类型被认为是nil。
我找到的一项工作是使用objective-c扩展。有用;它给了我喜欢的类型“马”。
@nonobjc override var activityType() -> UIActivityType? {
return UIActivityType.customActivityType
}
我的问题是如何以纯粹的方式做到这一点。
答案 0 :(得分:8)
在纯Swift3中,我可以使用
编译它->