swift Kotlin中的条件接口

szqfcxe2  于 2022-12-28  发布在  Swift
关注(0)|答案(2)|浏览(145)

在Swift中,我们可以定义一个协议,该协议可以根据条件由classstruct遵循:

protocol AlertPresentable {
   func presentAlert(message: String)
}

extension AlertPresentable where Self : UIViewController {

 func presentAlert(message: String) {
    let alert = UIAlertController(title: “Alert”, message: message,  preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: “OK”, style: .default, handler: nil))
    self.present(alert, animated: true, completion: nil)
  }

}

AlertPresentable协议是有限制的,只能由UIViewController来遵循,有没有办法在Kotlin中实现同样的结果?

yws3nbqq

yws3nbqq1#

如果我正确理解了您要实现的目标,您可以使用一个扩展函数,将多个类型作为接收器类型的上限:

fun <T> T.presentAlert(message: String) 
    where T : UIViewController, T : AlertPresentable {
    // ...
}
vlju58qv

vlju58qv2#

虽然很晚了,但我只想澄清问题中的假设是错误的。问题中的扩展意味着默认实现仅适用于类型为“UIViewController”的对象。然而,协议本身可以由任何其他类型的对象实现。它只需要有自己的“presentAlert”函数实现。

相关问题