Как создать несколько протоколов в одном ViewController? - PullRequest
1 голос
/ 02 ноября 2019

Я бы хотел создать протокол, который бы выполнял разные действия. моя ссылка - это интерфейс на Java Android, который позволяет создавать переменную в качестве интерфейса, а затем инициализировать, как мы реализуем в классе. Итак, что такое эквивалент интерфейса в быстром коде?


//Android Interface
private OnValueChanged joinDay, birthDay;

//initialize
joinDay = new OnValueChanged(value -> {
//somecode
});

birthday = new OnValueChanged(value -> {
//somecode
});


interface OnValueChanged{
   void didChanged(Date value)
}

//END OF ANDROID INTERFACE








//SWIFT PROTOCOL

class myClass : OnValueChanged{


func didChanged(Int value){
//somecode
}

}

protocol OnValueChanged{
    func didChanged(Int value)
}

//END OF SWIFT PROTOCOL

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

как это сделать в swift?

спасибо

1 Ответ

0 голосов
/ 02 ноября 2019

Вам не нужен отдельный тип для этого в Swift. Ваш интерфейс Java может быть представлен с замыканием в Swift. В частности, это замыкание типа (Int) -> Void.

. Вы можете объявить joinDay и birthday следующим образом в Swift:

var joinDay: ((Int) -> Void)?
var birthday: ((Int) -> Void)?

Чтобы назначить «реализацию», выполните:

joinDay = { value in
    // do something with the parameter "value"
    print(value)
}

И эквивалент вызова joinDay.didChanged(someValue) в Swift будет:

joinDay?(someValue)

Для получения дополнительной информации о том, как использовать замыкания, см. Замыкания вSwift Guide.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...