How can method in Swift with inout parameter be used in Objective-C?

后端 未结 2 903
孤街浪徒
孤街浪徒 2021-02-19 01:18

I want

func foo(inout stop: Bool) -> Void {
    // ...
}

use in my Objective-C part. But it is never generated in Module-Swift.h header. If

2条回答
  •  遇见更好的自我
    2021-02-19 01:54

    You can't use an inout parameter when bridging with Objective-C, but you can do something similar if you use an UnsafeMutablePointer (T would be Bool in your case). It would look something like this:

    @objc func foo(stop: UnsafeMutablePointer) -> Void {
        if stop != nil {
            // Use the .pointee property to get or set the actual value stop points to
            stop.pointee = true
        }
    }
    

    Example

    TestClass.swift:

    public class TestClass: NSObject {
        @objc func foo(stop: UnsafeMutablePointer) -> Void {
            stop.pointee = true
        }
    }
    

    Objective-C:

    TestClass *test = [[TestClass alloc] init];
    BOOL stop = false;
    [test foo:&stop];
    // stop is YES here
    

提交回复
热议问题