集合<UITouch>没有成员"location"

Set<UITouch> has no member "location"

我正在进行的项目的一部分要求我使用触摸来移动对象。我目前是 运行 Swift 3.1 和 Xcode 8.3.3。第 7 行给我的错误是:

Value of type 'Set<UITouch>' has no member 'location'

不过我查了文档,是会员。有什么解决方法吗?我只需要通过触摸和拖动来移动图像。

import UIKit

class ViewController: UIViewController {

var thumbstickLocation = CGPoint(x: 100, y: 100)

@IBOutlet weak var Thumbstick: UIButton!

override func touchesBegan(_ touches:Set<UITouch>, with event: UIEvent?) {
    let lastTouch : UITouch! = touches.first! as UITouch
    thumbstickLocation = touches.location(in: self.view)
    Thumbstick.center = thumbstickLocation

}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let lastTouch : UITouch! = touches.first! as UITouch
    thumbstickLocation = lastTouch.location(in: self.view)
    Thumbstick.center = thumbstickLocation
}

location确实不是Set<UITouch>的成员。您应该访问集合的 UITouch 元素才能访问它。

thumbstickLocation = touches.first!.location(in: self.view)

...但最好使用 if letguard let:

来安全访问它
if let lastTouch = touches.first {
    thumbstickLocation = lastTouch.location(in: self.view)
    Thumbstick.center = thumbstickLocation
}

编译错误正确,Set<UITouch>没有成员locationUITouch 有 属性 location.

您实际需要编写的是 thumbstickLocation = lastTouch.location(in: self.view) 将对象移动到触摸开始的位置。您还可以通过在一行中编写两个函数的主体来使您的代码更加简洁。

一般来说,你不应该使用强制解包可选值,但是使用这两个函数,你可以确定 touches 集合将只有一个元素(除非你设置视图的 isMultipleTouchEnabled 属性 到 true,在这种情况下它将有多个元素),所以 touches.first! 永远不会失败。

class ViewController: UIViewController {

    var thumbstickLocation = CGPoint(x: 100, y: 100)

    @IBOutlet weak var Thumbstick: UIButton!

    override func touchesBegan(_ touches:Set<UITouch>, with event: UIEvent?) {
        Thumbstick.center = touches.first!.location(in: self.view) 
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        Thumbstick.center = touches.first!.location(in: self.view)
    }
}