【问题标题】:Using @objc attribute for a Swift class that doesn’t inherit from an Objective-C class对不从 Objective-C 类继承的 Swift 类使用 @objc 属性
【发布时间】:2015-12-25 09:38:27
【问题描述】:

Using Swift with Cocoa and Objective-C (Swift 2.1) documentation 的互操作性部分中的以下段落似乎暗示有一种方法可以使用不继承自 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

我是不是误解了什么?

【问题讨论】:

    标签: objective-c swift language-interoperability


    【解决方案1】:

    在 Apple 开发者论坛上查看 thread

    基本上你所说的在 Xcode

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

    【讨论】:

    • 非常感谢!所以文档没有更新。
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多