Swift make 메서드 매개 변수를 변경할 수 있습니까?
추가 변수를 생성하지 않고 어떻게이 오류를 처리 할 수 있습니까?
func reduceToZero(x:Int) -> Int {
while (x != 0) {
x = x-1 // ERROR: cannot assign to 'let' value 'x'
}
return x
}
x 값을 저장하기 위해 추가 변수를 만들고 싶지 않습니다. 내가 원하는 것을 할 수 있습니까?
다른 답변에서 언급했듯이 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'
이것은 재귀에서 특히 유용 할 수 있습니다.
Apple의 인아웃 선언 지침은 여기 에서 찾을 수 있습니다 .
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'매개 변수는 더 이상 사용되지 않으며 Swift 3에서 제거됩니다. 따라서 새 매개 변수에 할당하는 것이 이제 가장 좋은 방법 인 것 같습니다.
func reduceToZero(x:Int) -> Int {
var x = x
while (x != 0) {
x = x-1
}
return x
}
여기에서 언급했듯이 : 'var'매개 변수는 더 이상 사용되지 않으며 Swift 3에서 제거됩니다.
가변 배열 포인터 전달에 대한 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 페이지) 에있는 "상수 및 변수 매개 변수"하위 섹션을 참조하십시오 .
함수형 프로그래밍과 함께 Swift3를 사용하는 솔루션 ...
func reduceToZeroFP(x:Int) -> Int {
while (x > 0) {
return reduceToZeroFP(x: x-1)
}
return x
}
우리가 사용하지 않는 경우가 있습니다 inout
변경 / 범위가 함수 내부에만 있도록하려면 다음과 같이 사용할 수 있습니다.
func manipulateData(a: Int) -> Int {
var a = a
// ...
}
참고URL : https://stackoverflow.com/questions/24077880/swift-make-method-parameter-mutable
'Programming' 카테고리의 다른 글
표 셀에 여러 줄 문자를 표시하는 방법 (0) | 2020.08.15 |
---|---|
런타임에 특정 하위보기에 대한 자동 레이아웃을 비활성화 할 수 있습니까? (0) | 2020.08.15 |
Core 2.0의 ConfigurationBuilder에서 BasePath를 설정하는 방법 (0) | 2020.08.15 |
`WinMain @ 16 '에 대한 정의되지 않은 참조 (0) | 2020.08.15 |
SQLAlchemy ORM을 사용하여 효율적으로 데이터베이스 업데이트 (0) | 2020.08.15 |