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 = {
编辑
添加一些说明...
当用var
或let
声明一个属性(class级变量)时,它立即被实例化,对其余部分一无所知class.
的
如果您使用 lazy var
,它在 首次使用 之前不会实例化... 知道 class 并且它可以访问 self
.
我想我对 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 = {
编辑
添加一些说明...
当用var
或let
声明一个属性(class级变量)时,它立即被实例化,对其余部分一无所知class.
如果您使用 lazy var
,它在 首次使用 之前不会实例化... 知道 class 并且它可以访问 self
.