Swift函数不包含在自动生成的-Swift.h伞形文件中

最后发布: 2018-03-21 09:24:27


问题

我正在尝试按照本指南https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html从Objective-C访问Swift类方法。

这是我的Swift课:

import Foundation

@objc public class MySwiftClass: NSObject {
    // modifiers public, open do not help
    func Hello()->String {
        return "Swift says hello!";
    }
}

这是自动生成的“ umbrella”文件MyProductModuleName-Swift.h的摘录

SWIFT_CLASS("_TtC25_MyProductModuleName12MySwiftClass")
@interface MySwiftClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

似乎XCode完全忽略了MySwiftClass的方法,结果我无法从Objective-C访问它们。 Xcode版本是9.2。 是错误还是我错过了任何东西?

}
objective-c swift xcode
回答

您需要在要从Objective-C访问的每个函数之前添加@objc

@objc public class MySwiftClass: NSObject {
    // modifiers public, open do not help
    @objc func Hello() -> String {
        return "Swift says hello!";
    }
}
}