728x90
결론
1. Int면 Int끼리, String이면 String끼리 교환하고 싶은데 제약을 못 걸어줌
2. Any로 매개변수를 받는다면, 전달인자에 Any로 전달되어야 함
3. Any 타입을 넣어 호출하는데, 이 순간 값이 복사되어 할당됨 (새 변수로만 함수를 호출한다는 뜻)
Any, AnyObject
스위프트에는 특정 타입을 지정하지 않고 여러 타입의 값을 할당할 수 있는 Any와 AnyObject라는 특별한 타입이 있다.
Any는 함수 타입을 포함한 모든 타입을 뜻하고, AnyObject는 클래스 타입만을 뜻한다.
제네릭 (Generic)
제네릭은 스위프트의 어떤 타입에도 유연하게 대응할 수 있으며 코드의 중복을 줄이는 기능이다.
[이전 글 참고]
[Swift] 제네릭 문법
제네릭 제네릭은 스위프트의 어떤 타입에도 유연하게 대응할 수 있으며 코드의 중복을 줄이는 기능이다. 또한, 제네릭으로 구현한 기능과 타입은 재사용에도 쉬우며 Array, Dictionary, Set 등의 타입
kyxxn.tistory.com
제네릭 대신 Any 타입을 사용하면 안될까 ?
func swapTwoValues(_ a: inout Any, _ b: inout Any) {
let tmp: Any = a
a = b
b = tmp
}
var anyOne: Any = 1
var anyTwo: Any = "Two"
print("anyOne: \(anyOne) | anyTwo: \(anyTwo)")
swapTwoValues(&anyOne, &anyTwo)
print("anyOne: \(anyOne) | anyTwo: \(anyTwo)")
print()
var strOne: String = "A"
var strTwo: String = "B"
anyOne = strOne
anyTwo = strTwo
print("anyOne: \(anyOne) | anyTwo: \(anyTwo)")
swapTwoValues(&anyOne, &anyTwo)
print("변경 후 anyOne: \(anyOne) | anyTwo: \(anyTwo)")
print("변경 후 strOne: \(strOne) | strTwo: \(strTwo)")
swapTwoValues(&strOne, &strTwo) // 에러
Any 매개변수에는 Any 타입이 들어가야 한다.
"Inout argument could be set to a value with a type other than 'String'; use a value declared as type 'Any' instead"
String 타입이 들어가니 에러 뜸
결론 제네릭을 쓰자
'iOS > Swift Grammar' 카테고리의 다른 글
[Swift] final을 사용해야 하는 이유 with Dispatch (0) | 2024.05.22 |
---|---|
[Swift] 제네릭 문법 (0) | 2024.02.15 |
[Swift] 클로저(Closure) 간소화 표현, 값 획득, 탈출 클로저 (1) | 2024.02.06 |
[Swift] 클로저(Closure) 기본 클로저와 후행(트레일링) 클로저 (1) | 2024.02.06 |
[Swift] class와 struct 차이 (0) | 2024.01.09 |