【问题标题】:Swift returns error "method 'beginTrackingWithTouch(_:withEvent:)' with Objective-C selector 'beginTrackingWithTouch:withEvent:' conflicts"Swift 返回错误“方法 'beginTrackingWithTouch(_:withEvent:)' 与 Objective-C 选择器 'beginTrackingWithTouch:withEvent:' 冲突”
【发布时间】:2016-01-30 12:56:21
【问题描述】:

我从 XCode 6.2 升级到 XCode 7.0.1 后收到此错误消息。

/Users/ZERO/Documents/Xcode/XXXXX/Library/SegmentedControl/SegmentedControl.swift:124:10: 使用 Objective-C 的方法 'beginTrackingWithTouch(:withEvent:)' 选择器“beginTrackingWithTouch:withEvent:”与方法冲突 来自超类“UIControl”的“beginTrackingWithTouch(:withEvent:)” 使用相同的 Objective-C 选择器

我的代码:

func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool {

    let location = touch.locationInView(self)

    var calculatedIndex : Int?
    for (index, item) in labels.enumerate() {
        if item.frame.contains(location) {
            calculatedIndex = index
        }
    }


    if calculatedIndex != nil {
        selectedIndex = calculatedIndex!
        sendActionsForControlEvents(.ValueChanged)
    }

    return false
}

【问题讨论】:

    标签: ios objective-c xcode swift


    【解决方案1】:

    它具有几乎相同签名的方法在UIContol中定义。

    beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?)
    

    不同的是event参数一直是可选的。

    因此编译器无法区分它们。 .

    如果你想重写beginTrackingWithTouch()方法,你可以将事件类型parameter改为UIEvent?,并添加override注解如下:

    override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
        ...
    
        return false
    }
    

    【讨论】:

    • 我会先试试。顺便说一句,我不能使用覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多