Swift 3扩展返回“没有成员”错误

时间:2017-05-03 06:36:21

标签: ios swift uitextfield extension-methods

我创建了一个名为 UnderlinedUITextField 的扩展程序。我试图在另一个类的UITextField上调用它的唯一函数加下划线,但是我收到错误类型'UITextField'的值没有成员'加下划线'。

我按照我在网上找到的一个例子,它对他们很有效。我不知道为什么我会收到这个错误。

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!

4 个答案:

答案 0 :(得分:1)

您的扩展程序应该是UITextField而不是UnderlinedUITextField您希望扩展现有的类以获得新方法。

答案 1 :(得分:0)

您的titleOfArticleTextField是正常的UITextField,因此您不知道您已将underlined添加到UnderlinedUITextField

的功能

尝试更改您的扩展程序,使其扩展为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
    }
}

希望有所帮助。

答案 2 :(得分:0)

看起来UnderlinedUITextField是使用UITextField扩展的控件,所以我的猜测是变量titleOfArticleTextField的类型应该是UnderlinedUITextField而不是UITextField

@IBOutlet weak var titleOfArticleTextField: UnderlinedUITextField!  // <-- Check type here

这应该可以解决错误,并找到方法。

由于您的扩展程序是为UnderlinedUITextField定义的,因此您可以安全地将下划线功能仅调用UnderlinedUITextField类型的文本字段,并且它不适用于{{1}类型输入。

答案 3 :(得分:0)

您的扩展名必须为 UITextField

因为扩展名称表示扩展了该特定类的功能。现在,如果要为UITextField类添加更多功能,则必须创建名为UITextField的扩展。