【问题标题】:How to create delegates in Swift?如何在 Swift 中创建委托?
【发布时间】:2014-07-24 04:03:47
【问题描述】:

如何在 Swift 中从头开始创建委托?例如,假设我想在每次打开键盘时滚动到 tableView 的底部(UITextFieldDelegate)。我从哪里开始实施这个?挑战是在另一个类(在本例中为视图控制器)中执行一个方法。 注意:我四处搜索,没有找到 Swift 语言的重复问题。

【问题讨论】:

  • 您是要实现 UITextFieldDelegate 还是要定义自己的委托协议?
  • @drewag 定义我自己的。

标签: ios swift


【解决方案1】:

您的问题有些含糊,但我认为您要查找的词是“协议”,Apple 的 docs: 对此进行了详尽的解释

以下示例定义了一个带有单个实例的协议 方法要求:

protocol RandomNumberGenerator {
    func random() -> Double
}

在其他地方创建实现所需方法的类:

class LinearCongruentialGenerator: RandomNumberGenerator {
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0

    func random() -> Double {
        lastRandom = ((lastRandom * a + c) % m)
        return lastRandom / m
    }
}

您在其他地方存储/使用协议,调用委托上定义的方法(实现协议)。

class Dice {
    let sides: Int
    let generator: RandomNumberGenerator // delegate object that implements the protocol

    init(sides: Int, generator: RandomNumberGenerator) {
        self.sides = sides
        self.generator = generator
    }

    func roll() -> Int {
        return Int(generator.random() * Double(sides)) + 1
    }
}

至于在哪里做,和 Obj-c 一样。 Swift 让它变得更容易,因为它不需要您导入头文件,因此您可以将它放在客户端(使用它的类)的文件中,也可以放在它自己的文件中。如上所述,您将在将成为委托实例的类中声明并实现协议方法。

【讨论】:

  • 谢谢,这很有帮助。
猜你喜欢
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多