【问题标题】:UIActivityType – Property cannot be an @objc override because its type cannot be represented in Objective-CUIActivityType – 属性不能是 @objc 覆盖,因为它的类型不能在 Objective-C 中表示
【发布时间】:2016-08-22 09:09:08
【问题描述】:

在更新到 Xcode 8 Beta 6 时,我看到引入了一种新类型:UIActivityType

所以我尝试在我的 UIActivity 自定义类中做这样的事情:

class FooActivity: UIActivity {
    func retrieveActivityType() -> String {
        return "someStringDescribingActivityType"
    }

    override open var activityType: UIActivityType? {
        @objc(retrieveActivityType)
        get {
            return UIActivityType(rawValue: "someStringDescribingActivityType")
        }
    }
}

其中retrieveActivityType() 是Objective-C 的等价物,因为UIActivityType 仅在Swift 中定义。但到目前为止没有运气,仍然有两个错误:

  1. Property cannot be an @objc override because its type cannot be represented in Objective-C
  2. '@objc' getter for non-'@objc' property

我有什么明显的遗漏吗?

【问题讨论】:

  • 如果该类型只存在于 Swift 中,为 getter 定义不同的名称并没有帮助。
  • 旁白:如果UIActivityType 不是UIKit 类型,我建议重命名它。令人困惑。
  • 如果您只是扩展类UIActivityItemProvider 并覆盖任何UIActivityItemSource 协议方法(特别是为活动类型提供主题的方法),则会出现问题。错误是:“方法不能是 @objc 覆盖,因为参数 2 的类型不能在 Objective-C 中表示”

标签: objective-c swift swift3 xcode8-beta6


【解决方案1】:

只需将返回类型设为非可选即可快速解决问题。 我想在 beta 7 发布之前没有真正的解决方法。

class FooActivity: UIActivity {
    override open var activityType: UIActivityType {
    get {
        return UIActivityType(rawValue: "someStringDescribingActivityType")
    }
}

来源:

https://bugs.swift.org/browse/SR-2344

https://github.com/apple/swift/pull/4360

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多