集合<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 let
或 guard let
:
来安全访问它
if let lastTouch = touches.first {
thumbstickLocation = lastTouch.location(in: self.view)
Thumbstick.center = thumbstickLocation
}
编译错误正确,Set<UITouch>
没有成员location
。 UITouch
有 属性 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)
}
}
我正在进行的项目的一部分要求我使用触摸来移动对象。我目前是 运行 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 let
或 guard let
:
if let lastTouch = touches.first {
thumbstickLocation = lastTouch.location(in: self.view)
Thumbstick.center = thumbstickLocation
}
编译错误正确,Set<UITouch>
没有成员location
。 UITouch
有 属性 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)
}
}