간략한 스위프트 문법/사용법 정리
🧐 Array(배열)
📎 배열 생성 방법
[빈 배열 생성하기]
var products = Array<String>() // 정식 문법
var ages = [Int]() // 축약형
(일반적으로는 축약형을 주로 사용한다고 한다.)
[기본값 할당하며 생성하기]
// 3칸짜리 Int 타입 배열 생성.
var Dobules = Array(repeating: 0, count: 3) // [0, 0, 0]
// 리터럴 활용
var shoppingList: [String] = ["Eggs", "Milk"]
var items = ["pen", "card"] // 축약형
- 축약형으로 선언하면 타입 추론에 의해 배열의 타입이 결정된다.
📎 원소 추가, 제거, 접근 방법
[원소 추가]
// 원소를 맨 뒤에 추가한다.
shoppingList.append("Apple")
// 여러 원소를 한번에 append
shoppingList.append(contentsOf: ["Potato", "Melon"])
shoppingList += ["Pork", "Chicken"] // 위와 동일한 방법
// 특정 위치에 원소 추가
shoppingList.insert("Beer", at: 1) // shoppingList[1]이 "Beer"가 된다.
[원소 제거]
// 특정 index의 원소를 삭제한다.
shoppingList.remove(at: 0)
// 삭제와 동시에 값을 반환하므로, 변수에 값을 받아놓을 수 있다.
var item = shoppingList.remove(at: 0)
print(item)
// 맨 앞(0번 인덱스)의 원소를 삭제한다.
shoppingList.removeFirst()
// 맨 뒤의 원소를 삭제한다.
shoppingList.removeLast()
// 전부 다 삭제한다.
shoppingList.removeAll()
[원소 접근]
var shoppingList = ["Eggs", "Milk"]
// 배열에 들어있는 원소의 개수
var count = shoppingList.count // count: 2
// 배열이 비어있는지 확인
shoppingList.isEmpty // false
// 배열의 특정 위치에 접근하기
var firstItem = shoppingList[0] // firstItem: "Eggs"
📎 배열 순회 방법
shoppingList = ["Eggs", "Milk"]
for item in shoppingList {
print(item)
}
// Eggs
// Milk
인덱스까지 필요할 때는 enumerated() 메소드를 사용한다.
shoppingList = ["Eggs", "Milk"]
for (index, item) in shoppingList.enumerated() {
print(index, item)
}
// 0 Eggs
// 1 Milk
🧐 Set(집합)
Set은 원소들의 중복을 허용하지 않는다. 그래서 자료의 중복을 제거해야 할 때 Set을 사용하면 편하다.
(Array 타입의 자료를 Set으로 변환하면 자동으로 중복이 제거된다.)
그리고 원소들의 순서를 보장하지 않는다. 따라서, 인덱스로 접근하는 것은 불가능하고,
Set에 자료를 저장하기 위해서는 반드시 타입이 hashable 이어야만 한다.
(String, Int, Double, Bool 등 기본 자료 타입이 hashable이다.)
📎 Set 생성 방법
Array와 거의 비슷하다.
// 빈 Set 생성
var favoriteGenres = Set<String>()
// 리터럴 활용
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"] // 타입 생략
[Array를 Set으로 캐스팅하는 방법]
// Array 생성
var shoppingList = ["Eggs", "Milk", "Milk"] // "Milk" 값이 중복되어 있음.
// Array -> Set으로 캐스팅하며 생성
var shoppingSet = Set(shoppingList) // 알아서 중복을 제거해준다.
// "Eggs"
// "Milk"
📎 원소 추가, 삭제
[원소 추가]
favoriteGenres.insert("Jazz")
[원소 삭제]
favoriteGenres.remove("Rock")
삭제하려는 원소가 없을땐 'nil'을 반환하므로, 옵셔널 바인딩을 사용하여 처리하면 안전하다.
if let removedGenre = favoriteGenres.remove("Rock") {
print("\(removedGenre) 삭제 완료!")
} else {
print("원소 없음!")
}
📎 값 확인 방법
if favoriteGenres.contains("Funk") {
print("값이 존재합니다.")
} else {
print("값이 존재하지 않습니다.")
}
📎 집합 연산
var a: Set = [1, 2, 3, 4, 5]
var b: Set = [4, 5, 6, 7, 8]
두 개의 집합이 위와 같은 상황일 때,
[교집합]
a.intersection(b)
// {4, 5}
[합집합]
a.union(b)
// {1, 2, 3, 4, 5, 6, 7, 8}
[대칭 차집합 (합집합 - 교집합)]
a.symmetricDifference(b)
// {1, 2, 3, 6, 7, 8}
[차집합]
a.subtracting(b)
// {1, 2, 3}
🧐 Dictionary
[Key : Value] 형태로 자료를 관리할 수 있다.
📎 선언 방법
var names = Dictionary<String, Int>()
var namesOfIntegers = [Int : String]()
var namesOfStreet = [String : Any]() // Value를 Any로 선언
// 리터럴
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
// 축약형
var sample1 = ["a":1, "b":2, "c":3]
sample1 = [:] // 빈 딕셔너리로 초기화
- 딕셔너리 namesOfIntegers의 Key는 Int 타입으로, Value는 String 타입으로 사용할 수 있도록 선언된다.
- 딕셔너리의 Value는 Any 타입으로 지정할 수 있다.
- 축약형은 타입 추론에 의해 타입이 결정된다.
📎 원소 추가, 삭제, 접근 방법
[원소 추가]
airports["ICN"] = "Incheon"
namesOfStreet["302st"] = "1st Street"
namesOfStreet["MainStreet"] = 1000 // Any 타입으로 설정했기때문에 할당 가능함.
[원소 삭제]
// nil 할당
namesOfStreet["302st"] = nil
// removeValue
// key가 없다면 nil을 반환하고, 있다면 value를 optional로 반환한다.
namesOfStreet.removeValue(forKey: "302st") //Optional("1st Street")
// 전체 삭제
namesOfStreet.removeAll()
[원소 접근]
airports["DUB"] // Optional("Dublin")
딕셔너리는 조회하려는 Key가 없을 경우 nil을 반환하기 때문에, Value를 옵셔널로 반환한다.
옵셔널을 언래핑 하려면 default 값을 지정해주면 된다.
airports["DUB", default: ""] // "Dublin"
airports["GMP"] // nil
airports["GMP", default: ""] // ""
[기타 사용법]
// Key, Value 각각 조회하기
print(airports.keys) // ["ICN", "YYZ", "DUB"]
print(airports.values) // ["Incheon", "Toronto Pearson", "Dublin"]
// for-in 문으로 순회하기
for dict in airports {
print(dict.key, dict.value)
}
// DUB Dublin
// YYZ Toronto Pearson
// ICN Incheon
'iOS(macOS) > Swift' 카테고리의 다른 글
[Swift/문법] Closure (클로저) (0) | 2022.08.07 |
---|---|
[Swift/문법] 제어문(Control flow), Function (0) | 2022.08.04 |
[Swift/문법] 변수, 상수, 튜플과 옵셔널 (0) | 2022.07.24 |
[Xcode] 파일 확장자 표시하기 (0) | 2022.07.13 |
[Xcode] 스토리 보드 - 첫 화면 설정하기 (Main interface) (0) | 2022.07.13 |