【问题标题】:Swift extension on UITextField won't compile on swift 1.2 and xcode6.3UITextField 上的 Swift 扩展不会在 swift 1.2 和 xcode6.3 上编译
【发布时间】:2016-01-29 00:00:30
【问题描述】:

xCode 更新 6.3 后我遇到了这个问题: "MyUItextViewExtension.swift:xx:xx: 方法 'editingRectForBounds' 和 Objective-C 选择器 'editingRectForBounds:' 与之前使用相同 Objective-C 选择器的声明冲突"

我的 Swift 代码是:

extension UITextField{      

    func editingRectForBounds(bounds: CGRect) -> CGRect{

        if self.leftView != nil {

            let textFieldPadding : CGFloat = 24.0
            return CGRectMake(bounds.origin.x + textFieldPadding, bounds.origin.y, bounds.size.width+textFieldPadding*2, bounds.size.height)
        } else {
            return textRectForBounds(bounds)
        }
    }

     func  textRectForBounds(bounds: CGRect) -> CGRect {

        if self.leftView != nil {

            let textFieldPadding : CGFloat = 24.0
            return CGRectMake(bounds.origin.x + textFieldPadding, bounds.origin.y, bounds.size.width+textFieldPadding*2, bounds.size.height)
        } else {
            let textFieldPadding : CGFloat = 8.0
            return CGRectMake(bounds.origin.x + textFieldPadding, bounds.origin.y, bounds.size.width+textFieldPadding*2, bounds.size.height)
        }
    }
}

我无法理解此错误的原因。 在项目中未定义 UITextField 上的另一类扩展...

【问题讨论】:

    标签: ios swift uitextfield xcode6.3


    【解决方案1】:

    editingRectForBounds 已经存在于 UITextField 中,所以你可能应该override 它。

    来自documentation

    你不应该直接调用这个方法。如果你想为文本提供一个不同的编辑矩形,你可以重写这个方法并返回那个矩形。

    编辑:

    我之前没有意识到你想在一个扩展中使用这个。再说一次,如果我相信 documentation 并且这次我没有弄错你想要什么,那就有问题了:

    您不能使用扩展来覆盖 Objective-C 类型的现有方法或属性。

    【讨论】:

      【解决方案2】:

      添加到现有的答案 - Xcode 6.3 和 Swift 1.2 对您可以做什么和不可以做什么更加严格。 Apple 已迅速收紧,您可能正在摆脱一些“糟糕”但以前版本的 Xcode 没有赶上的东西。

      【讨论】:

      • 我已经在 UITextfield 子类中转换了扩展。现在可以正常工作了。但似乎扩展现在无法覆盖或重新定义对象的方法。
      • 如果你想覆盖或重新定义你需要子类。扩展通过添加新事物来“扩展”一个类。
      【解决方案3】:

      可以覆盖一个函数,但它必须被声明为公共的。错误是

      覆盖实例方法必须与其覆盖的声明一样可访问

      这是我一直致力于扩展 UITextField 的示例

      override public func becomeFirstResponder() -> Bool
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        相关资源
        最近更新 更多