【问题标题】:Extending UIKit class with Swift breaks Interface Builder使用 Swift 扩展 UIKit 类会破坏 Interface Builder
【发布时间】:2015-02-12 02:59:36
【问题描述】:

我遇到了最奇怪的错误。当你用 Swift 扩展一些 UIKit 类来实现一个协议时,比如扩展UIButton 来实现协议SomeProtocol(是的,它甚至可以是空的):

protocol SomeProtocol {
}

extension UIButton: SomeProtocol {
}

当右键单击 UIButton 对象时,IB 中的上下文菜单会丢失其大部分选项:

如果我删除那个扩展,我会得到这个:

有没有人遇到过类似的情况?有解决办法吗?

Xcode 6.1.1 和 Xcode 6.3 Beta 1 都会发生这种情况。您在哪里定义扩展名无关紧要 - 在项目的源文件中或在框架中作为子项目。

我尝试将协议声明为

@objc protocol SomeProtocol
@objc protocol SomeProtocol: class
protocol SomeProtocol: class

但没有任何作用。

【问题讨论】:

  • 你试过使用'NSObjectProtocol'吗?

标签: ios xcode swift


【解决方案1】:

原因可能是您声明了一个纯 Swift 协议,用于扩展 ObjC 类。 尝试将协议声明为@objc protocol SomeProtocol {,或者甚至可以强制它为仅类,如protocol SomeProtocol: class {

【讨论】:

  • 我相信我们在这里不走运。可能发生的情况是 IB 仅支持 ObjC 功能,而在 ObjC 中,您不能使用协议扩展类,因此在这种情况下 IB 会发疯。不过,这只是一个猜测,您可能会在 Apple 开发者论坛上提问,或者甚至只是提交一个错误,然后看看 Apple 人怎么说。
  • 太糟糕了。提交错误 19799266。
  • 尝试使用 quickradar.com 之类的东西,这样它就会将副本发布到 OpenRadar,然后我也可以提交这么大的文件,这样可能会引起更多关注。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多