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

时间:2018-10-03 07:33:27

标签: ios objective-c 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
    }

我遇到了两个问题。

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

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

感谢帮助!

2 个答案:

答案 0 :(得分:5)

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

    MySwiftClass* instance = [[MySwiftClass alloc] initWithFirstName: @"John" lastName: @"Doe"];
    
  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
        }
    }
    

答案 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参数