Проблемы с подклассом 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)
}
Другие вопросы по тегам