Swift:设置代表

Swift: Setting Delegates

我想我对 swift 中的代表有误解。我想做的是以编程方式将 textField 添加到我的 Controller 中。因此,我编辑了 class,如下所示:

class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {
}

据我了解,现在我可以将 UITextFieldDelegate 添加到我的文本字段,它会调用扩展。
但不知何故,每次我设置委托时,它都会告诉我:

Cannot assign value of type '(HomeController) -> () -> HomeController' to type 'UITextFieldDelegate?'

因此,我想知道如何将 TextField 的委托设置为 UITextFieldDelegate?

我的 class 看起来如下:

 class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {
  let sampleTextField: UITextField = {
    let textField = UITextField(frame: CGRect(x: 20, y: 100, width: 300, height: 40))
    textField.placeholder = "Enter text here"
    textField.font = UIFont.systemFont(ofSize: 15)
    textField.borderStyle = UITextField.BorderStyle.roundedRect
    textField.autocorrectionType = UITextAutocorrectionType.no
    textField.keyboardType = UIKeyboardType.default
    textField.returnKeyType = UIReturnKeyType.done
    textField.clearButtonMode = UITextField.ViewMode.whileEditing
    textField.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center
    textField.delegate = self

    return textField
 }()
}

变化:

let sampleTextField: UITextField = {

至:

lazy var sampleTextField: UITextField = {

编辑

添加一些说明...

当用varlet声明一个属性(class级变量)时,它立即被实例化,对其余部分一无所知class.

如果您使用 lazy var,它在 首次使用 之前不会实例化... 知道 class 并且它可以访问 self.