2015-10-26 4 views
0

В Objective-C я мог бы определить свой собственный тип блока:Вызова самоопределенного замыкания в Swift

typedef void (^myBlock)(id param1, id param2, BOOL param3); 

затем определить тело блока где-нибудь еще (например, другой класс), чтобы сделать что-то с переданными значениями, такими как :

myBlock block = ^(id param1, id param2, BOOL param3) { 
if (param3){ 
    NSLog("parameters:%@,%@",param1,param2) 
}}; 

Чтобы сделать то же самое в Swift я определил мой блок с помощью typealias:

typealias myBlock = (param1:AnyObject, param2:AnyObject, param3:Bool) ->() 

, но я не мог просто назвать это как:

let block: myBlock = {param1,param2,param3 in 
if (param3){ 
    print(param1,param2) 
}} 

и там было предупреждение:

Инициализация неизменного значения «блок» никогда не использовался; рассмотрите , заменив его на «_» или удалив.

Как я могу позвонить myBlock и определить его тело в Свифт?

Заранее благодарен!

ответ

0

В вашей декларации нет ничего плохого. Но, как говорит вам слово, вы просто объявляете что-то и не звонили. Поэтому замыкание нигде не называется.

Попробуйте один

typealias myBlock = (param1:AnyObject, param2:AnyObject, param3:Bool) ->() 

let block: myBlock = {(param1,param2,param3) in 
if (param3){ 
    print(param1,param2) 
}} 

block(param1: 1,param2: 2,param3: true) 

Вы должны заменить фактический параметр с вашими ценностями, конечно. Работает как шарм, как вы можете видеть на скриншоте на игровой площадке.

enter image description here

1

Я думаю, предупреждение появляется из-за того, что вы не использовали переменную «block» в любом месте вашего кода.

После объявления переменной «block» попытайтесь использовать ее где-нибудь в своем коде.

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