#ios #xcode #swift4 #arkit
#iOS #xcode #swift4 #arkit
Вопрос:
У меня есть потребность, когда я должен умножить SCNVector3 на 0.1, чтобы получить новую позицию. Когда я пытаюсь это сделать, я получаю сообщение об ошибке ниже. Это работало раньше в более ранних версиях Xcode. Я использую Xcode 10.1 с компилятором версии Swift 4. Я видел другие ответы на тот же вопрос, но тип данных здесь отличается.
Binary operator '*' cannot be applied to operands of type 'SCNVector3' and 'Double'
И код, который я использую, приведен ниже,
guard let pointOfView = sceneView.pointOfView else { return }
let mat = pointOfView.transform
let dir = SCNVector3(-1 * mat.m31, -1 * mat.m32, -1 * mat.m33)
пусть currentPosition = pointOfView.position (dir * 0.1) ——> Получение ошибки здесь
let projectedPlaneCenter = self.sceneView.projectPoint(currentPosition)
zVal = Double(projectedPlaneCenter.z)
Ответ №1:
Оператор *
не определен для операндов SCNVector3
и Double
.
Я предполагаю, что под someVector * 0.1
вы подразумеваете умножение каждого компонента вектора на 0,1?
В этом случае вы могли бы определить свой собственный *
оператор:
// put this in the global scope
func *(lhs: SCNVector3, rhs: Double) -> SCNVector3 {
return SCNVector3(lhs.x * CGFloat(rhs), lhs.y * CGFloat(rhs), lhs.z * CGFloat(rhs))
}
// usage
SCNVector3(1, 2, 3) * 0.1 // (0.1, 0.2, 0.3)
Ответ №2:
Поместите это в свой проект, и он должен работать.
public static func * (lhs: SCNVector3, rhs: Double) -> SCNVector3 {
return SCNVector3(lhs.x * .init(rhs), lhs.y * .init(rhs), lhs.z * .init(rhs))
}
public static func * (lhs: Double, rhs: SCNVector3) -> SCNVector3 {
return rhs * lhs
}
}