메서드 매개 변수를 변경할 수 있도록 신속하게 설정하시겠습니까?
변수를 추가하지 않고 이 오류를 해결하려면 어떻게 해야 합니까?
func reduceToZero(x:Int) -> Int {
while (x != 0) {
x = x-1 // ERROR: cannot assign to 'let' value 'x'
}
return x
}
x의 값만 저장하기 위해 변수를 추가로 만들고 싶지는 않습니다만, 제가 원하는 것을 할 수 있을까요?
다른 답변에서 설명한 바와 같이, Swift 3에서는 변수가 폐지되기 전에 변수를 배치했습니다.다른 답변에서는 언급되지 않았지만, 이 질문에 대해 선언할 수 있는 능력입니다.inout
파라미터를 지정합니다.생각해 보세요: 포인터를 건네주세요.
func reduceToZero(_ x: inout Int) {
while (x != 0) {
x = x-1
}
}
var a = 3
reduceToZero(&a)
print(a) // will print '0'
이것은 재귀 시 특히 유용합니다.
애플의inout
선언 가이드라인은 여기에서 확인할 수 있습니다.
'var' 매개 변수는 사용되지 않으며 Swift 3에서 제거됩니다.따라서 현재 새로운 파라미터에 할당하는 것이 최선의 방법인 것 같습니다.
func reduceToZero(x:Int) -> Int {
var x = x
while (x != 0) {
x = x-1
}
return x
}
여기서 설명한 바와 같이 'var' 파라미터는 사용되지 않으며 Swift 3에서 삭제됩니다.
Swift 1 및 2의 경우(Swift 3의 경우 inout 매개 변수를 사용하여 aci로 응답 참조):Swift에서 함수의 인수는let
디폴트이므로 로 변경합니다.var
값을 변경해야 할 경우,
func reduceToZero(var x:Int) -> Int {
while (x != 0) {
x = x-1
}
return x
}
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페이지)의 "기능" 장에 있는 "상수 및 가변 매개변수" 하위 섹션을 참조하십시오.
사용하지 않는 경우도 있습니다.inout
변경/범위가 함수 내부에만 포함되도록 하려면 다음과 같은 방법을 사용할 수 있습니다.
func manipulateData(a: Int) -> Int {
var a = a
// ...
}
기능 프로그래밍과 함께 Swift5를 사용한 솔루션...
func reduceToZeroFP(x:Int) -> Int {
x == 0 ? x : reduceToZeroFP(x: x - 1)
}
언급URL : https://stackoverflow.com/questions/24077880/swift-make-method-parameter-mutable
'programing' 카테고리의 다른 글
서브모듈을 분리하려면 어떻게 해야 하나요? (0) | 2023.04.24 |
---|---|
오류: 서비스가 잘못되었습니다. (0) | 2023.04.24 |
Log4Net(애플리케이션 통찰력 포함) (0) | 2023.04.24 |
각도 지시 - 컴파일, 컨트롤러, 프리링크 및 포스트링크를 사용하는 시기와 방법 (0) | 2023.04.24 |
일반 목록 내의 모든 Null 요소를 한 번에 제거하려면 어떻게 해야 합니까? (0) | 2023.04.24 |