Инициализировать закрытие в Swift - PullRequest
0 голосов
/ 24 апреля 2018

Я знаю, как инициализировать замыкание, которое не принимает аргументов, например:

class testClass {
    var myClosure: () -> ()

    init(){
        myClosure = {}
    }
}

Однако я не мог понять, как инициализировать замыкание следующим образом:

var myClosure: (Int) -> ()

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Простой пример:

class TestClass {
    var myClosure: (Int) -> ()
    init(){
        func myFunc(_:Int) {}
        self.myClosure = myFunc
    }
}

Или используйте анонимную функцию:

class TestClass {
    var myClosure: (Int) -> ()
    init(){
        self.myClosure = {_ in}
    }
}

Или вы можете выполнить инициализацию как часть, если объявление myClosure:

class TestClass {
    var myClosure : (Int) -> () = {_ in}
    init(){
    }
}

Но если у вас нет значения myClosure во время инициализации, почему бы не сделать его необязательным?

class TestClass {
    var myClosure: ((Int) -> ())?
    init(){
    }
}
0 голосов
/ 24 апреля 2018

Закрытие типа (Int) -> () ожидает один параметр (и Swift скажет вам, что этот параметр нельзя неявно игнорировать).

Итак, если вы хотите иметь замыкание, которое принимает один параметр, вы должны указать это явно:

let myClosure: (Int) -> () = { parameter in }

(если вам не нужен параметр, вы можете заменить его символом подстановки, чтобы игнорировать его)

let myClosure: (Int) -> () = { _ in }

Кроме того, вы можете использовать неявные аргументы ($0, $1 и т. Д.), Но они работают только тогда, когда вы используете параметр где-то в замыкании (например, присваивая его другой переменной или передавая его в качестве параметра) к функции):

let myClosure: (Int) -> () = { print($0) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...