如何OC
问题描述:
使用SWIFT封闭在斯威夫特UIViewController
,我的代码:如何OC
import Foundation
import UIKit
typealias SayHello =()->String
@objc class SwiftViewController:UIViewController{
var sayHello:SayHello?
override func viewDidLoad() {
super.viewDidLoad()
if let helloClosure = sayHello{
helloClosure()
}
}}
在我OC UIViewController
,我的代码:
swiftViewController.sayHello = ^(){
return "Hello block";
};
当Xcode
编译OC文件,它显示了一个错误:
Incompatible block pointer types assigning to 'NSString * _Nonnull(^_Nullable)(void)'from 'char *(^)(void)'
错误在哪里...(对不起,我忘了@之前的“Hello block”在OC文件中。这是一个粗心的错误。现在它工作正常。谢谢!)
答
你忘了"Hello block"
前@
,从而你是返回一个C字符串,因为你没有明确指定该块的返回类型,编译器推断它为char*
,这显然是不兼容与NSString*
。
如果声明块为^NSString*(){
,那么你会得到一个错误,告诉返回值不匹配,甚至建议你添加@
+0
谢谢!我刚才发现那个错误。这是一个粗心的错误! – William
对不起,您可以通过OC是什么意思? –
我在“Hello block”之前忘了@。这是一个粗心的错误。感谢您看我的问题。 – William