본문 바로가기
Coding

유형 자리 표시자: 새로운 Swift 5.6 기능 살펴보기

by Jakegyllenhaal 2022. 4. 22.
반응형

유형 자리 표시자: 새로운 Swift 5.6 기능 살펴보기

 

유형 자리 표시자는 최근 Swift 5.6에 도입되었습니다. 새롭고 유용한 Swift 기능에 연락하십시오.

유형 자리 표시자는 최근 Swift 5.6에 도입되었습니다. 예, 강력한 Swift 유형 추론 시스템에 대한 훌륭한 추가 기능입니다. C++에 익숙하다면 auto 예어. 유형 자리 표시자는 거의 똑같다.

let number: _ = 42 // Type placeholder
let anotherNumber = 42

예, Swift는 변수의 유형을 유추할 수 있지만 유형 자리 표시자는 여러 유형이 포함된 유형에 사용됨을 의미합니다. 제네릭. 그것이 그들이 정말로 빛나는 곳입니다.

정기적으로 고려 Result 열거

enum Result<Success, Failure> where Failure : Error {
case success(Success)
case failure(Failure)
}

그리고 우리가 어떤 종류의 복잡한 객체를 가지고 있다면 어떻게 될까요?

var ohMy = [1: [3: (1, 2, 3, "That's a long tuple")]]

생성하려고 하면 Result ~에서 ohMy컴파일 오류가 표시됩니다.

let result = Result.success(ohMy)

참고: 일반 매개변수 Failure 유추할 수 없었다

브루. 그래서 써야하는데...

let result = Result<[Int : [Int : (Int, Int, Int, String)]], Error>.success(ohMy)

💡 유형 자리 표시자를 사용하여 Swift가 유추할 수 있는 유형을 생략하세요.

유형 자리 표시자 덕분에 아닙니다. Swift는 자체적으로 객체의 유형을 유추할 수 있습니다. 그래서, 우리는 제공해야합니다 Failure 유형만.

let result = Result<_, Error>.success(ohMy) // Nice

이 기능은 컬렉션에도 유용합니다. 열거형 키가 있는 사전이 필요하면 어떻게 합니까?

enum Foo {
case bizz
case bonk
}

let results = [
.bizz: ohMy,
.bonk: ohMy
]

회원에 대한 참조 bizz 컨텍스트 유형 없이는 해결할 수 없습니다.

그래서 이것을 제공하자. 문맥 유형, 하지만 어떻게 기억하니 ohMy님의 타입이 못생겼나요? 유형 자리 표시자를 사용합시다.

// 🚫
let results:[Foo: [Int : [Int : (Int, Int, Int, String)]]] = [
.bizz: ohMy,
.bonk: ohMy
]

// ✅
let results:[Foo: _] = [
.bizz: ohMy,
.bonk: ohMy
]

더 많은 예

자리 표시자를 포함하는 유형의 예는 다음과 같습니다.

Array // array with placeholder element type
[Int: _] // dictionary with placeholder value type
(_) -> Int // function type accepting a single type placeholder argument and returning 'Int'
(_, Double) // tuple type of placeholder and 'Double'
_? // optional wrapping a type placeholder