Der*_*328 4 xcode overriding uiactivity swift
我刚刚从swift 2升级到swift 3,我遇到了覆盖属性的一些问题.
在swift 2中,您可以像这样设置活动类型
override func activityType() -> String? {
return "com.a.string"
}
Run Code Online (Sandbox Code Playgroud)
但是在swift 3中(在Xcode 8 beta 6中)他们引入了NS_STRING_ENUM,现在我们覆盖了这样的activityType
override var activityType() -> UIActivityType? {
return UIActivityType.customActivityType
}
Run Code Online (Sandbox Code Playgroud)
问题是Xcode会抱怨:属性不能是@objc覆盖,因为它的类型不能用Objective-C表示
我找到的一个解决方案是将注释@nonobjc添加到它中,如下所示:
@nonobjc override var activityType() -> UIActivityType? {
return UIActivityType.customActivityType
}
Run Code Online (Sandbox Code Playgroud)
虽然这有助于使错误消失,但此属性永远不会被调用...这是一个问题,因为当用户完成活动并且调用completionWithItemsHandler()时,活动类型被视为nil.
我找到的一个工作是使用objective-c扩展.有用; 它给了我喜欢的"马"类型.
@interface Custom_UIActivity (custom)
- (UIActivityType)activityType;
@end
@implementation Custom_UIActivity (custom)
- (UIActivityType)activityType {
return @"horses";
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何以纯粹的速度做到这一点.
在纯Swift3中,我可以使用它编译它
override var activityType: UIActivityType {
return UIActivityType(rawValue: self.customActivityType.rawValue)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |