swift 인 - 아웃 파라미터에 대해 알아보겠습니다.
예시 함수입니다.
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
일반적인 swift함수와 inout의 차이점은 함수에서 인자로 받은 값이 함수 내에서 변경을 해도
해당 함수를 사용한 공간에서도 인자값의 값이 변화한다는 것입니다.
말로 하면 좀 이해가 어려우실거같아서 해당 함수를 예시로 보여드리겠습니다.
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// Prints "someInt is now 107, and anotherInt is now 3"
해당 함수를 사용하게되면
someInt라는 값이 다른 별다른 값의 변화를 주지 않았어도 107이라는 인자 값으로 변환이 되어있는 것으로 확인할 수 있습니다.
그리고 인자 값을 사용할 때 & 이게 붙어 있는 것을 볼 수 있는데 C언어를 아시는 분이라면 포인터 개념이라고 하시면 이해하기 편하실 텐데
C언어를 모르시는 분들에게 간단하게 말씀드리면 본체를 넘겨준다?라고 이해하시면 편하실 것 같아요
var tempA : Int = 1
var tempB : Int = 2
func tempFunc(a : Int , b : Int){
print(a)
print(b)
}
tempFunc(a : tempA , b : tempB)
예시로 이런 로직이 있다고 치면
tempFunc이라는 함수에서 tempA , tempB라는 인자를 사용했지만
함수 입장에서 봤을 때 tempA , tempB에 담겨있는 1,2라는 인자 값을 사용한 것이지
tempA , tempB와는 무관하다 라고 생각하시면 됩니다
하지만 inout을 이용하게 된다면
인자 값이 아닌 tempA , tempB를 직접적으로 사용하는 것이 된다
그래서 함수 내에서 tempA , tempB에 대한 값들이 변경이 돼도 실제로 적용이 된다 라고 보시면 되는데
제가 적어놓고도 참... 이해가 안되게 적어놓았네요... ㅜㅜ
swiftUI 에서 사용하는 방식을 한번 보여드리겠습니다.
//
swiftUI 에서 사용하는 공간
//변수선언
@State var selectedNumber : Int = 0
//사용
testFunc.init().swapTwoInts(&selectedNumber)
//함수영역
public class testFunc {
public var tempInt : Int = 2
func swapTwoInts(_ a: inout Int) {
a = 1
self.tempInt = 2
}
}
이렇게 사용을 하게 된다면 selectedNumber 가 1로 변화가되고 만약 거기에맞춰 UI를 제약을 걸어놨다면 UI 도 다시 그려지는것까지 확인 할 수 있었습니다.
하지만 self.$selectedNumber 로 인자를 줄려고하니 빨간줄이 뜨더라구요 그 부분은 좀더 공부를 해봐야 알 수 있을 것 같습니다 ㅜ
우선 제가 이해한 척도 내에서 최대한 설명을 해드렸어요 해당 함수에 대한 자세한 정보는 아래 링크에서 자세히 볼 수 있습니다.
제가 틀렸다면 언제든지 지적해주시는 댓글 달아주시면 더 공부하겠습니다 감사합니다!
https://jusung.gitbook.io/the-swift-language-guide/language-guide/06-functions
'SwiftUI' 카테고리의 다른 글
앱스토어 등록시 전화 번호 : 유효하지 않은 필드입니다. (7) | 2021.01.26 |
---|---|
Geometryreader란? Geometryreader 사용하기 (0) | 2021.01.20 |
5392b68f539b489193e4508c39687898 (0) | 2020.12.27 |
SwiftUI view의 크기 (높이,넓이) 구해보자!! (0) | 2020.12.26 |
SwiftUI 카카오 로그인 사용하기 (0) | 2020.12.24 |