我有一个快速编写的库类,应该在现有的Objective-C代码中使用。 我创建了桥接头,并在.h中定义了@class MySwiftClass,并在.m中导入了“ -Swift.h”
快速班与此类似
@objc class MySwiftClass: NSObject {
var firstName : String
var lastName: String
public init(firstName: String, lastName: String) throws {
guard !firstName.isEmpty && !lastName.isEmpty else { throw SOME_ERROR }
self.firstName = firstName
self.lastName = lastName
super.init()
}
func methodWithParams(city: String, suburb: String) throws -> String {
return city + suburb
}
我遇到了两个问题。
不知道如何在Objective-C类上调用swift init
函数。我已经尝试过MySwiftClass *myClass = [MySwiftClass init];
。到目前为止,该应用可以编译。但是不知道如何传递参数。
我还想在Objective-c类中访问myClass.methodWithParams(city:"My city", suburb:"My country")
。
感谢帮助!
答案 0 :(得分:5)
您必须在初始化调用之前调用alloc。
MySwiftClass* instance = [[MySwiftClass alloc] initWithFirstName: @"John" lastName: @"Doe"];
使用@objc
标记方法,或使用@objcMembers
使您的方法可以从Objective-C代码中公开。不幸的是,您不能在Objective-C中使用可抛出的初始值设定项。
@objcMembers class MySwiftClass: NSObject {
var firstName : String
var lastName: String
public init(firstName: String, lastName: String) throws {
guard !firstName.isEmpty && !lastName.isEmpty else { throw SOME_ERROR }
self.firstName = firstName
self.lastName = lastName
super.init()
}
func methodWithParams(city: String, suburb: String) throws -> String {
return city + suburb
}
}
答案 1 :(得分:1)
要在Objective-C中实例化一个对象……
r
调用方法
NSError *error = NULL;
MySwiftClass *class = [[MySwiftClass alloc] initWithFirstName: @"John"
lastName: @"Smith"
error: &error]
Swift中的 [class methodWithParamsWithCity: @"My CIty" suburb: @"My suburb" error: &error];
在Objective-C中附加了一个throws
参数