4

我正在开发我以前在 Objective C 上完成的应用程序之一。我需要向它添加一个新模块,我决定对那个特定模块使用 Swift。

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

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

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

如果我只添加 IBActions,一切都会完美运行。但是当我添加 IBOutlet 时,编译器会抛出如下错误:

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

为了修复它,我有两种方法,

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

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

4

1 回答 1

7

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

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

于 2015-06-30T11:14:32.813 回答