Набор не имеет элемента " location"
Часть проекта, над которым я работаю, требует, чтобы я заставлял объект перемещаться с помощью прикосновения. В настоящее время я использую Swift 3.1 и Xcode 8.3.3. 7-я строка дает мне ошибки, говоря:
Но я просмотрел документацию, и она является членом. Есть ли какой-то обходной путь? Мне нужно только переместить изображение на основе касания и перетаскивания.Значение типа
'Set<UITouch>'
не имеет члена '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
}
2 ответа:
Ошибка компилятора верна,
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) } }
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 }