Мне нужно умножить 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)
let currentPosition = pointOfView.position + (dir * 0.1) ------> Getting error here
let projectedPlaneCenter = self.sceneView.projectPoint(currentPosition)
zVal = Double(projectedPlaneCenter.z)





Оператор * не определен для операндов 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)
Вставьте это в свой проект, и он должен работать.
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
}
}