답변:
다른 답변에서 언급했듯이 Swift 3에서 변수 앞에 var를 배치하면 더 이상 사용되지 않습니다. 다른 답변에는 언급되어 있지 않지만 inout
매개 변수 를 선언하는 기능 입니다. 생각하십시오 : 포인터를 전달하십시오.
func reduceToZero(_ x: inout Int) {
while (x != 0) {
x = x-1
}
}
var a = 3
reduceToZero(&a)
print(a) // will print '0'
이것은 재귀에서 특히 유용 할 수 있습니다.
inout
키워드는 func reduceToZero(x: inout Int)
현재 Swift 3 버전에서 와 같이 매개 변수 이름과 매개 변수 유형 사이에 배치되어야합니다 .
'var'매개 변수는 더 이상 사용되지 않으며 Swift 3에서 제거됩니다. 따라서 새 매개 변수에 할당하는 것이 이제 가장 좋은 방법 인 것 같습니다.
func reduceToZero(x:Int) -> Int {
var x = x
while (x != 0) {
x = x-1
}
return x
}
여기에 언급 된대로 : 'var'매개 변수는 더 이상 사용되지 않으며 Swift 3에서 제거됩니다.
x
새 파일을 복사 var x
합니까? 아니면 Swift가 그보다 더 효율적인 작업을하고 있습니까?
x
등록부에 적합) 사실상 비용이 없습니다. x
변형 된 배열, 구조체 또는 객체 인 경우 거의 확실하게 복사를 수행해야합니다 (최적화 프로그램이이를 인라인으로 분석하고 별칭을 지정할 수없는 경우).
var
것보다 args를 대체하는 것이 더 좋습니다 inout
. var가 포인터라면.
Swift 1 및 2의 경우 (Swift 3의 경우 inout 매개 변수를 사용하여 achi의 답변 참조) : Swift의 함수 인수는 let
기본적으로 있으므로 var
값을 변경해야하는 경우로 변경합니다.
func reduceToZero(var x:Int) -> Int {
while (x != 0) {
x = x-1
}
return x
}
var
매개 변수에 따라 새로운 스위프트 버전에서 사라질 가능성이 높다 github.com/apple/swift-evolution/blob/master/proposals/...
가변 배열 포인터 전달에 대한 Swift3 답변.
함수:
func foo(array: inout Array<Int>) {
array.append(1)
}
함수 호출 :
var a = Array<Int>()
foo(array:&a)
Swift에서는 var
함수 선언에서 변수 이름 앞에 키워드를 추가 하기 만하면됩니다 .
func reduceToZero(var x:Int) -> Int { // notice the "var" keyword
while (x != 0) {
x = x-1
}
return x
}
Swift 책 의 "함수"장 (현재 iBook의 210 페이지) 에있는 "상수 및 변수 매개 변수"하위 섹션을 참조하십시오 .