2016-01-21 7 views
-1

В Swift UIViewController, Мой код:Как использовать Swift замыкания в 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)'

Где ошибка ... (Извините, я забыл @ перед «Привет блоком» в файле OC. t - неосторожная ошибка. Теперь он работает нормально. Спасибо!)

+0

Извините, что вы имеете в виду OC? –

+0

Я забыл @ перед «Привет блок». Это неосторожная ошибка. Спасибо, что посмотрел на мой вопрос. – William

ответ

1

Вы забыли @ перед "Hello block", таким образом, вы возвращаете C-строку, и потому, что вы не сделали явно указан тип возвращаемого блока, компилятор выводит его как char*, который явно несовместим с NSString*.

Если вы объявляете блок как ^NSString*(){, то вы получите сообщение об ошибке, говорящее о том, что возвращаемое значение не соответствует, и даже предложить вам добавить @

+0

Спасибо! Я нашел эту ошибку только сейчас. Это неосторожная ошибка! – William

Смежные вопросы