Swift 3 扩展返回 "has no member" 错误
Swift 3 extension returning "has no member" error
我创建了一个名为 UnderlinedUITextField 的扩展。我试图在另一个 class 的 UITextField 上调用它的唯一函数 带下划线 ,但我收到错误 Value of type 'UITextField'没有成员 'underlined.'
我遵循了一个在网上找到的示例,它非常适合他们。我不确定为什么会收到此错误。
UnderlinedUITextField 扩展
import UIKit
extension UnderlinedUITextField {
func underlined() {
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.lightGray.cgColor
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
}
HomeScreenVC
import UIKit
class HomeScreenVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
titleOfArticleTextField.underlined() <- WHERE I GET THE ERROR MESSAGE
}
//MARK: Properties
@IBOutlet weak var titleOfArticleTextField: UITextField!
@IBOutlet weak var authorTextField: UITextField!
@IBOutlet weak var bulletPointTextField: UITextField!
@IBOutlet weak var previewOfImage: UIImageView!
@IBOutlet weak var uploadImage: UIButton!
您的扩展应该是 UITextField
而不是 UnderlinedUITextField
您想要扩展现有的 class 以获得新方法。
你的titleOfArticleTextField
是一个普通的UITextField
所以它不知道你在UnderlinedUITextField
中添加了一个叫做underlined
的函数
尝试更改您的扩展名,使其改为扩展 UITextField
:
extension UITextField {
func underlined() {
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.lightGray.cgColor
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
}
希望对您有所帮助。
看起来UnderlinedUITextField
是使用UITextField
扩展的控件,所以我猜测变量titleOfArticleTextField
的类型应该是UnderlinedUITextField
而不是[=12] =]:
@IBOutlet weak var titleOfArticleTextField: UnderlinedUITextField! // <-- Check type here
这应该可以修复错误,并找到方法。
由于您的扩展是为 UnderlinedUITextField
定义的,使用这种方式您可以安全地将下划线函数调用到类型为 UnderlinedUITextField
的文本字段,并且它不适用于类型 UITextField
类型。
您的扩展名必须是 UITextField.
因为顾名思义,扩展扩展了特定 class 的功能。现在,如果您想为 UITextField 添加更多功能 class,那么您必须创建一个名称为 UITextField 的扩展。
我创建了一个名为 UnderlinedUITextField 的扩展。我试图在另一个 class 的 UITextField 上调用它的唯一函数 带下划线 ,但我收到错误 Value of type 'UITextField'没有成员 'underlined.'
我遵循了一个在网上找到的示例,它非常适合他们。我不确定为什么会收到此错误。
UnderlinedUITextField 扩展
import UIKit
extension UnderlinedUITextField {
func underlined() {
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.lightGray.cgColor
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
}
HomeScreenVC
import UIKit
class HomeScreenVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
titleOfArticleTextField.underlined() <- WHERE I GET THE ERROR MESSAGE
}
//MARK: Properties
@IBOutlet weak var titleOfArticleTextField: UITextField!
@IBOutlet weak var authorTextField: UITextField!
@IBOutlet weak var bulletPointTextField: UITextField!
@IBOutlet weak var previewOfImage: UIImageView!
@IBOutlet weak var uploadImage: UIButton!
您的扩展应该是 UITextField
而不是 UnderlinedUITextField
您想要扩展现有的 class 以获得新方法。
你的titleOfArticleTextField
是一个普通的UITextField
所以它不知道你在UnderlinedUITextField
underlined
的函数
尝试更改您的扩展名,使其改为扩展 UITextField
:
extension UITextField {
func underlined() {
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.lightGray.cgColor
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
}
希望对您有所帮助。
看起来UnderlinedUITextField
是使用UITextField
扩展的控件,所以我猜测变量titleOfArticleTextField
的类型应该是UnderlinedUITextField
而不是[=12] =]:
@IBOutlet weak var titleOfArticleTextField: UnderlinedUITextField! // <-- Check type here
这应该可以修复错误,并找到方法。
由于您的扩展是为 UnderlinedUITextField
定义的,使用这种方式您可以安全地将下划线函数调用到类型为 UnderlinedUITextField
的文本字段,并且它不适用于类型 UITextField
类型。
您的扩展名必须是 UITextField.
因为顾名思义,扩展扩展了特定 class 的功能。现在,如果您想为 UITextField 添加更多功能 class,那么您必须创建一个名称为 UITextField 的扩展。