阻止 swift 中从 Objective-c 的转换

Block conversion in swift from Objective-c

如何将以下块从 Objective-C 转换为 Swift。我正在使用 bridge headerSwift 中使用 Objective-C 个文件。但是块转换中的小混乱

Objective-C 块:

+ (void) while:(id)obj name:(void(^)(type*))callback;

示例输出:

[Sub while:keeper viewControllerChanged:^(NSString* newNickname) {
        NSLog(@"\nVC2- Now screen is in: %@", newNickname);
    }];

如何在 swift 中转换它?

编辑: Swift 块错误是

Sub.while(obj: AnyObject!, viewControllerChanged: ((String!) -> Void)!)

我不确定您是在问如何在 swift 中编写块,还是我没有完全理解您的问题。但是如果是第一个那么...

(void(^)(type*))callback

变成

callback: (param:type*)->(returnType*)

func doSomething(callback:((number:Int)->()))

被称为

doSomething(callback:{number in 
    print("\(number)")
})

当你定义:

class func while1(obj:AnyObject, callback name:((newNickname:NSString?) -> Void)) {


}

调用函数时:

self.while1(self) { (newNickname) -> Void in

        print("\nVC2- Now screen is in:" + "\(newNickname)")
    }

编辑:

好的,那么你只想从 swift.. 调用它,对吧..?然后使用这个语句:

ClassName.while1(obj as AnyObject) { (nickName:String!) -> Void in

        print(nickName)
    }

但首先要确保在你的定义语句中 "type" 指示的是什么数据类型,所以请在那里定义实际的数据类型

+ (void)while:(id)obj name:(void(^)(type*))callback;

至 --> 例如:

+ (void)while1:(id)obj name:(void(^)(NSString *))callback;

还有一点要注意while是内置关键字,请尽可能不要使用它。

你可以这样调用:

YourClassName.while2(Yourparameter , name: {(nickName : String) -> Void in

    })

希望对您有所帮助。