Objective C&Swift互操作性导致错误"扩展可能不包含存储的属性"

Mid*_* MP 4 objective-c language-interoperability iboutlet ios swift

我正在研究我在Objective C上完成的一个应用程序.我需要为它添加一个新模块,我决定将Swift用于该特定模块.

我有一个HomePage在Objective C中调用的类,我想在其中添加一些新的IBActions和IBOutlets.为此,我添加了一个新的swift文件并扩展了现有的类,如:

// MARK: IBOutlets and IBActions
extension HomePage
{
    @IBOutlet var image : UIImageView!
    ...

    /*!
    * Loads the application support webpage
    */
    @IBAction func loadSupportURL(sender : UIButton)
    {
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果我只添加IBActions,一切都很完美.但是当我添加一个IBOutlet时,编译器会抛出一个错误:

扩展名可能不包含存储的属性

为了解决这个问题,我有两种方法,

  1. 在我的Objective C类中声明出口
  2. 将整个Objective C类转换为Swift并在那里声明属性

有没有其他方法可以解决这个问题?

Cih*_*Tek 7

正如错误消息明确指出的那样,您不能在扩展中存储属性.但问题是,你不能将它们放在Objective-C类别中,所以这里的语言不是问题.

在这两种语言中,您需要使用关联的引用来实现存储的属性.有关在Swift中使用关联引用的示例,请参阅此主题.由于它是一个C API,它在Objective-C中的用法几乎相同.