let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
//dictionary는 key:value형식의 배열
for (animalName, legCount) in numberOfLegs {
print("\(animalName)s have \(legCount) legs")
}
//숫자를 저장
var mynumber : Int = 10
위와 같이 초깃값이 있을 경우에는 컴파일러가 타입 추론을 하므로 데이터 타입을 명시할 필요 없음
스위프트 변수 : var
- 변경 가능
스위프트 상수 : let
-변경 불가능(코드 내에서 반복적으로 사용되는 값이 있을 경우에 유용)
-> 애플은 코드의 효율성과 실행 성능을 높이기 위해서 변수보다는 상수를 사용하라고 권장
타입 어노테이션과 타입 추론
타입 어노테이션: 선언 시점에 타입을 선언
타입 추론: 값을 가지고 추론
튜플(Tuple)
- 여러 값을 하나의 개체에 일시적으로 묶는 매우 간단한 방법
ex)
▶let myTuple = (10, 432.433, "This is a String")
▶var myString = myTuple.2
▶print(myString) //출력되는 값은? -> This is a String
- 값들이 모두 동일한 타입이어야 한다는 제약이 없음
- 인덱스 위치를 참조하여 간단하게 접근
- 단 한 줄의 코드로 튜플의 모든 값을 추출하여 변수 또는 상수에 할당
▶let myTuple = (10, 432.433, "This is a String")
▶let (myInt, myFloat, myString) = myTuple
- 튜플의 값을 선택적으로 추출하는 데 사용될 수 있으며, 무시하고 싶은 값에 밑줄을 사용하면 그 값은 무시
▶var (myInt, _, myString) = myTuple //부동 소수점 수는 무시
- 튜플을 생성할 때 각 값에 이름을 할당할 수도 있음
▶let myTuple = (count: 10, length: 432.433, message: "This is a String")
▶print(myTuple.message)
튜플의 가장 강력한 점은 함수에서 여러 값들을 한 번에 반환하는 것
스위프트 옵셜널 타입
: 값을 반환할 때 오류가 발생할 가능성이 있는 값은 옵셔널 타입이라는 객체로 감싸서 반환함
▶Int("100") 은 100이 아닌 Optional(100)을 리턴함,print(Int("100")), Int형 initializer
▶Int("Hi") 은 정수 값을 반환할 수 없음, 아무런 값도 반환할 수 없다는 의미로 nil을 반환
▶Swift에서 기본 자료형(Int, Double, String 등)은 nil값을 저장할 수 없음
▶nil도 저장하려면 옵셔널 타입으로 선언해야 함
- 옵셔널하게 변수를 선언하기 위해서는 타입 선언부 뒤에 “?” 문자를 씀
※주의 : 변수명 뒤에 “?”하는 것 아님
ex)
var index: Int?
if index != nil {
// index 변수에 할당된 값이 있다
} else {
// index 변수에 할당된 값이 없다
}
옵셔널 변수는 초기화하지 않으면 자동으로 nil로 초기화
옵셔널 타입 강제 언래핑(forced unwrapping) 1
- !는 forced unwrapping operator : 이 값의 유효성을 확인했으니 값을 추출하여 사용하라
var index : Int?
index = 2
var Array = ["A", "B", "C", "D"]
if index != nil{
print(Array[index!])
} else {
print("index does not contain a value")
}
-> C
var index : Int?
var Array = ["A", "B", "C", "D"]
if index != nil{
print(Array[index!])
} else {
print("index does not contain a value")
}
-> index does not contain a value
옵셔널 타입 강제 언래핑(forced unwrapping) 2
var index : Int?
index = 3
var Array = ["A", "B", "C", "D"]
if let value = index{ //옵셔널 변수 값을 상수 myvalue에 대입
print(Array[value])
} else{
print("index does not contain a value")
}
- 위의 코드는 두 가지 작업을 한다
1. 첫 번째, 지정된 옵셔널이 값을 가지고 있는지를 확인
2. 두 번째, 옵셔널이 값을 가지고 있으면 선언된 상수에 그 값을 할당하고 구문의 블록에 있는 코드가 실행
※myvalue 상수는 임시 상수이므로 if 문의 영역 안에서만 유효함 (if 문의 실행이 끝나면 그 상수는 더 이상 존재하지 않음)
- 하나의 구문에 두 개의 옵셔널을 언래핑하기 위하여 옵셔널 바인딩을 사용
ex)
var pet1: String?
var pet2: String?
pet1 = "cat"
pet2 = "dog"
if let firstPet = pet1, secondPet = pet2 {
print(firstPet)
print(secondPet)
} else {
print("insufficient pets")
}
- 불리언 조건을 검사하기 위하여 where 절을 사용
ex)
if let firstPet = pet1, secondPet = pet2 where petCount > 1 {
print(firstPet)
print(secondPet)
} else {
print("no pets")
}
옵셔널 타입 암묵적 언래핑(implicitly unwrapping)
- 옵셔널이 항상 유효한 값을 가질 경우
ex)
var index: Int! // 옵셔널은 이제 암묵적인 언래핑 // Int?에서 느낌표가 됨
index = 3
var treeArray = ["Oak", "Pine", "Yew", "Birch"]
if index != nil {
print(treeArray[index]) // index!에서 느낌표가 사라짐
} else {
print("index does not contain a value")
}
- 클래스 초기화에서 많이 사용
'iOS 프로그래밍 > 문법' 카테고리의 다른 글
[swift] 문법정리6 (옵셔널 체이닝) (0) | 2020.07.31 |
---|---|
[swift] 문법정리5 (배열, 딕셔너리,클래스와 구조체 열거형 비교) (0) | 2020.07.31 |
[swift] 문법정리4 (클래스, 상속, 익스텐션) (0) | 2020.07.31 |
[swift] 문법정리3 ( 함수와 메서드, 클로저) (0) | 2020.07.30 |
[swift] 문법 정리2 (0) | 2020.07.30 |