튜플 유형은 Objective-C 개발자에게 다소 외래적인 개념이며 때때로 a struct또는 class. 그러나 사실, 그것들은 둘 다보다 훨씬 더 기본적입니다. 저는 그것들을 최소한의 범위 내에서 사용하고 폐기해야하는 소형 구조체 또는 Struct Lite ™ 로 생각하고 싶습니다 .
Swift Types에 대한 Apple 문서에 따르면 :
튜플 유형은 괄호로 묶인 0 개 이상의 유형을 쉼표로 구분 한 목록입니다.
그들은 단지 다른 유형의 화합물 일뿐입니다. 튜플은 0 개 이상의 유형, 일반적으로 String, Integer및 Bool기타 튜플을 포함 할 수 있습니다 . 또한 튜플은 참조가 아닌 value 로 전달됩니다 .
let foo = (0, false, “Hello”)
let foo: (Int, Bool, String) = (0, false, “Hello”)
print(foo.0) // print: “0”
print(foo.1) // print: “false”
print(foo.2) // print: “Hello”
let bar: (Int, (Bool, String)) = (1, (false, “Hello”))
print(bar.0) // print: “0”
print(bar.1.0) // print: “false”
print(bar.1.1) // print: “Hello”
그러나 인덱스를 사용하고 어떤 값에 해당하는 것을 기억해야하는 대신 가능한 한 튜플의 속성 이름을 지정하는 것이 가장 좋습니다.
let person = (age: 28, isTall: false, name: “Andyy”)
print(person.age) // print: “28”
print(person.isTall) // print: “false”
print(person.name) // print: “Andyy”
튜플을 사용하는 가장 좋은 장소는 여러 유형을 반환 할 수있는 함수를 원할 때입니다. Objective-C 개발자라면이 개념은 이상하게 들리며 아마도 불가능할 수도 있습니다. 이전에 우리는 NSArray또는을 반환하여 이러한 문제를 극복해야했습니다 NSDictionary. 그러나 그 해결책조차도 위험 할 수 있습니다. 의 잘못된 객체를 형변환하고 NSArray특정 함수를 호출하면 어떨까요? 런타임에 충돌이 발생할 수 있습니다.
대신 Objective-C의 한계에 대한 유격수 해키 솔루션을 제시하는 대신 함수가 여러 값을 반환하도록 만드는 방법을 살펴 보겠습니다.
typealias Person = (age: Int, isTall: Bool, name: String)
func getMultipleValues() -> Person {
let person: Person = (age: 28, isTall: false, name: “Andyy”)
return person
}
let andyy = getMultipleValues()
print(andyy.age) // print: "28"
print(andyy.isTall) // print: "false"
print(andyy.name) // print: "Andyy"
그러나 위에서 볼 수 있듯이 getMultipleValues() 각각 해당하는 변수 이름을 가진 세 가지 개별 데이터 유형의 튜플을 반환 하는 함수 호출 이 있습니다.
업데이트 : 이것은 더 이상 사용되지 않을 것입니다. Swift 3.0
제안 : SE-0029
함수 응용 프로그램에서 암시 적 튜플 표시 동작 제거
이 게시물의 시작 부분에서 농담으로 튜플을 Struct Lite ™ 라고했습니다 . 조금 알려진 사실은 튜플을 사용하여 구조체를 인스턴스화 할 수 있다는 것입니다.
let size = CGSize(width: 100, height: 100)
let arguments: (width: CGFloat, height: CGFloat) = (100, 100)
var size = CGSize(arguments)
let arguments: (height: CGFloat, width: CGFloat) = (100, 100)
❗️ var size = CGSize(arguments)
내가 거기서 뭘했는지 보여? height와 width 위치를 바꿔서 인수 배열을 변경했습니다 . 둘 다이지만 CGFloat컴파일러는 수행하려는 작업을 추론 할 수 없습니다.
이전에 Swift를 사용했다면 실제로 반환 유형에 튜플을 실제로 사용했을 가능성이 있습니다. 아래에는 세 가지 별도의 함수가 있습니다.이 함수는 모두 똑같은 작업을 수행하고 (아무것도하지 않음) 값을 반환하지 않습니다.
func doNothingA() -> Void { }
func doNothingB() -> () { }
func doNothingC() { }
멋진 것은 Void단지 typealiasfor ()입니다. 실제로는 빈 튜플입니다. 이 게시물의 시작 부분에서 기억한다면 튜플은 0 개 이상의 유형을 포함 할 수 있다고 언급했습니다 .
마음. 부푼. 천만에요.
사람들이“튜플”이라는 단어를 어떻게 발음하는지에 대해 큰 혼란이 있습니다. 어떤 사람들은“Two-pull”이라고 말하고 다른 사람들은“Tup-pl”이라고 말하고, 가장 미친 사람들은“Choo-pl”이라고 말합니다. 당신이 선호하는 것이 무엇이든, 그것에 대해 부를 준비를하십시오.
이 게시물의 샘플 코드 는 GitHub에서 찾을 수 있습니다. 조금 더 잘 이해하는 데 도움이되는 간단한 놀이터 파일입니다.
오늘 읽은 내용이 마음에 들면 다른 기사를 확인 하거나 연락하고 싶으시면 저에게 트윗을 보내거나 Twitter 에서 저를 따라 오세요 . 정말 좋은 하루입니다. 저는 또한 호주 멜버른에서 Playgrounds Conference 를 조직 하고 다음 행사에서 뵙겠습니다.
facebook.com에 요청하면 컴퓨터가 도메인 이름을 조회하여 해당 도메인 이름을 IP 주소로 변환하므로 컴퓨터가 해당 연결을 만들 수 있습니다.
차량 공유를 위한 게임 체인저 Lyft에서 우리가 하는 모든 일 중에서 라이더와 운전자 간의 픽업 안무는 가장 복잡하고 결과적인 것 중 하나입니다. 이 안무를 잘하는 것은 Lyft가 많은 일을 잘하는 것에 달려 있지만 단순히 라이더가 속도를 유지하는 것이 필수적입니다.
안녕하세요, 사이버 애호가 여러분! 위협 사냥 시리즈에 대한 OSINT에 다시 오신 것을 환영합니다. 첫 번째 기사에서는 OSINT에 대한 개요와 위협 사냥에서의 중요성에 대해 설명했습니다.
새로운 직업으로 전환하는 것은 혼자서 하려고 한다면 매우 어려울 수 있습니다. 귀하와 동일한 학습 수준에 있고 유사한 목표, 끈기 및 추진력을 공유하는 책임 파트너를 찾는 것이 중요합니다.
2022년에는 GPT-3가 출시되면서 글쓰기 능력이 덜 중요해진 것 같습니다. AI를 사용하면 글이 서투른 사람들도 양질의 직원을 생성할 수 있습니다.
소개:용감한 독자 여러분, 지구의 가장 어두운 곳으로 우리를 데려다 줄 여행에 오신 것을 환영합니다. 이 블로그에서 우리는 Mariana Trench의 수수께끼 같은 세계를 탐구하여 숨겨진 비밀을 밝히고 그 표면 아래에 있는 뼛속까지 오싹해지는 진실을 밝혀냅니다.