2016-01-21 32 views
-1

使用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文件中。這是一個粗心的錯誤。現在它工作正常。謝謝!)

+0

對不起,您可以通過OC是什麼意思? –

+0

我在「Hello block」之前忘了@。這是一個粗心的錯誤。感謝您看我的問題。 – William

回答

1

你忘了"Hello block"@,從而你是返回一個C字符串,因爲你沒有明確指定該塊的返回類型,編譯器推斷它爲char*,這顯然是不兼容與NSString*

如果聲明塊爲^NSString*(){,那麼你會得到一個錯誤,告訴返回值不匹配,甚至建議你添加@

+0

謝謝!我剛纔發現那個錯誤。這是一個粗心的錯誤! – William

相關問題