Проблемы с подклассом UIActivity в Swift 3 с переопределением
Я только что перешел с swift 2 на swift 3, и у меня возникают некоторые проблемы с переопределением свойства.
В Swift 2 вы можете установить вид деятельности, как это
override func activityType() -> String? {
return "com.a.string"
}
Однако в Swift 3 (в Xcode 8 beta 6) они представили NS_STRING_ENUM, и теперь мы переопределяем активность типа, как этот
override var activityType() -> UIActivityType? {
return UIActivityType.customActivityType
}
Проблема в том, что Xcode будет жаловаться на это: свойство не может быть переопределением @objc, потому что его тип не может быть представлен в Objective-C
Одно из решений, которое я нашел, - добавить аннотацию @nonobjc следующим образом:
@nonobjc override var activityType() -> UIActivityType? {
return UIActivityType.customActivityType
}
Хотя это помогает устранить ошибку, это свойство никогда не вызывается... Это проблема, потому что, когда пользователь завершает действие и вызывается завершение WithItemsHandler(), тип действия считается равным nil.
Одна из работ, которую я нашел, заключается в использовании расширения target-c. Оно работает; это дает мне типа "лошадь", как я хотел.
@interface Custom_UIActivity (custom)
- (UIActivityType)activityType;
@end
@implementation Custom_UIActivity (custom)
- (UIActivityType)activityType {
return @"horses";
}
Мой вопрос заключается в том, как сделать это в кратчайшие сроки.
1 ответ
В чистом Swift3 я могу скомпилировать его с помощью
override var activityType: UIActivityType {
return UIActivityType(rawValue: self.customActivityType.rawValue)
}