1

使用 Swift 与 Cocoa 和 Objective-C (Swift 2.1) 文档的互操作性部分的以下段落似乎表明有一种方法可以使用不从 Objective-C 类继承的 Swift 类来实现互操作性。

当您创建从 Objective-C 类继承的 Swift 类时,该类及其成员(与 Objective-C 兼容的属性、方法、下标和初始化程序)会自动从 Objective-C 中获得。在某些情况下,您需要更精细地控制 Swift API 如何向 Objective-C 公开。如果您的 Swift 类不是从 Objective-C 类继承的,或者如果您想更改接口中符号的名称,因为它暴露给 Objective-C 代码,您可以使用 @objc 属性。

我尝试了以下操作:

import Foundation

@objc class FooBar {
    @objc var name: String;
    init() {
        name = "Hello World!"
    }
}

但不幸的是,它给出了一个编译错误:只有继承自 NSObject 的类才能声明为@objc

我误解了什么吗?

4

1 回答 1

2

看看Apple Developer Forums 上的这个帖子。

基本上你所说的在 Xcode <=6 中是可能的,但在 Xcode 7 中被删除了

几乎是的。@objcon Swift-rooted 类的行为从来都不像NSObject-rooted 类,导致生成的标头和运行时出现各种怪异。您仍然可以将任何 Swift 类实例视为AnyObject,将 Swift 类上的方法和属性标记为@objc,并符合 Objective-C 协议;该类只是没有在生成的标头中公开,并且不默认使其成员在 Objective-C 中可用。

于 2015-12-25T09:41:02.007 回答