使用来自Objective C类的参数调用Swift函数

sma*_*nja 2 objective-c ios swift

我有一个快速编写的库类,应该在现有的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
    }
Run Code Online (Sandbox Code Playgroud)

我遇到了两个问题。

  1. 不知道如何init在Objective-C类上调用swift 函数。我试过了MySwiftClass *myClass = [MySwiftClass init];。到目前为止,该应用可以编译。但是不知道如何传递参数。

  2. 我也想myClass.methodWithParams(city:"My city", suburb:"My country")在Objective-C类中访问。

感谢帮助!

小智 5

  1. 您必须在初始化调用之前调用alloc。

    MySwiftClass* instance = [[MySwiftClass alloc] initWithFirstName: @"John" lastName: @"Doe"];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将方法标记为@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
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)