2014-12-05 3 views
0

이 코드 실패스위프트 플로트 승산 오차

Playground execution failed: :140:51: error: cannot invoke '*' with an argument list of type '(Float, Float)' let multiplier = powf(-1, j+2)*element

명심는이 블록에서 발생 :

for j in 0...self.columnCount { 

columnCount는 않습니다 오차

let element: Float = self.getElement(row: 1, column: j) 
let multiplier = powf(-1, j+2)*element 

흙손. 또한 첫 번째 줄이 실행되므로 getElement 메서드는 실제로 Float를 반환합니다.

나는 그것이 작동해서는 안되는 이유가 없으므로 나는 이것에 완전히 의아해합니다.

답변

2

신속한 암시 적 숫자 변환이 없으므로 다른 유형을 처리 할 때 및/또는 예상 유형이 표현식 결과와 다른 경우 명시 적 변환을 수행해야합니다. 귀하의 경우에는

jpowfFloat 기대 Int 반면, 그래서 다음과 같이 변환해야합니다 일반적으로 정수로 간주 있지만이 자동으로 Float을 그대로 유추 2 것을

let multiplier = powf(-1, Float(j)+2)*element 

주 컴파일러에 의해 형식을 지정하므로이 경우 명시 적 변환은 필요하지 않습니다.

0

powf()을 호출 할 때 j 대신 Float(j)을 사용하여 문제를 해결했습니다. 분명히 j은 암시 적으로 Float로 변환 될 수 없습니다.