如何在Objective-C中使用Swift类(不是类的实例)

3
所有关于在主要使用Objective-C的应用中使用Swift代码的教程都需要按照苹果文档中提到的这个过程进行操作。文档链接:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html 但是导入一个xyzProjectName-swift.h文件并使用它的方法如下:
MySwiftClass *swiftObject = [[MySwiftClass alloc] init];
[swiftObject swiftMethod];

我需要创建一个 Swift 类的实例。是否可以直接访问类本身,例如 [MySwiftClass swiftMethod];

直到现在,我还没有成功实现这个功能。我需要以某种方式更改我的 Swift 代码才能做到这一点吗?


  1. 在表达式[MySwiftClass alloc]中,您是不是直接使用了Swift类“directly”(即向类对象本身发送消息)?
  2. 您尝试过什么?遇到了哪些问题?
- Amin Negm-Awad
我的Swift类中有一个函数,根据我传递的字符串返回特定的UIColor(在很多子类中使用)。所以我不想在每个地方进行alloc init或在所有类中声明它作为全局ivar。只想将其用作常规类方法。到目前为止,我无法直接访问它。它告诉我:“没有已知选择器'nameOfTheMethodIAmTryingToAccess'的类方法” - Ishaan Sejwal
йҷӨдәҶжҲ‘еӣһзӯ”дёӯзҡ„з®ҖеҚ•еҮҪж•°д№ӢеӨ–пјҢжҲ‘иҝҳе°қиҜ•дәҶдҪҝз”ЁSwiftж–№жі•static func makeColor(str: String) -> UIColorеӨ„зҗҶжӮЁзҡ„жғ…еҶө - д»ҺObjective-CдёӯдҪҝз”Ё[MySwiftClass makeColor:@"blue"];еҸҜд»ҘжӯЈеёёе·ҘдҪңгҖӮ - Arkku
1个回答

5

我刚尝试了以下内容:

class MySwiftClass: NSObject {
    static func swiftMethod() -> String {
        return "hello"
    }
}

在 Objective-C 中:

NSLog(@"Received from Swift: %@", [MySwiftClass swiftMethod]);

对我来说没问题 - 你确定你的swiftMethodstatic而不是private吗?你也可以尝试在static func前面添加@objc - 如果没有其他问题,至少它会警告你是否有理由无法从Objective-C中访问。


好的,在我的 funcletvar 前面加上 static 就可以了(错误消失了,甚至没有使用 @objc)。但我不知道为什么?你能告诉我之前发生了什么以及我使用 static 后发生了什么变化吗?据我所知,static 用于保留应用程序/进程的对象的生命周期或限制其不被子类使用。在这种情况下,static 如何应用? - Ishaan Sejwal
当您的类继承自Objective-C类时,@objc是隐式的,但您可以在协议和全局函数中使用它,以使它们可从Obj-C中使用。 static表示该方法或属性仅适用于类本身,而不是类的实例(在许多其他语言中也是如此,例如Java)。如果没有static,则MySwiftClass.swiftMethod()甚至在Swift中都无法工作... - Arkku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接