Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬서버
- 계산기앱만들기
- 맥
- iOS앱배포
- 스프링
- JavaScript
- FLASK
- ios
- customclass
- jQuery
- Python
- subscript
- iOS배포
- 자바스크립트
- 스위프트
- spring
- Xcode
- 딩동말씀
- 개발기록
- DispatchGroup
- 앱배포
- AJAX
- iOS계산기
- Xib
- 앱버전구하기
- 계산기앱
- Swift
- FileOwner
- MainScheduler
- 웹
Archives
- Today
- Total
개발하는 뚝딱이
[swift] 데이터 타입 본문
책 <스위프트 프로그래밍 3판 ;야곰 지음> 을 정리한 글입니다.
튜플 - Tuple
- 타입의 이름이 따로 지정되어 있지 않음
- '지정된 데이터의 묶음'
var person: (String, Int, Character) = ("뚝딱", 24, "A")
print(person.0) // 접근
person.1 = 25 // 할당
var person: (name: String, age: Int, grade: Character) = ("뚝딱", 24, "A")
print(person.0) // 인덱스로 접근
person.name = "뚝딱이들" // 이름으로 할당
컬렉션 - 배열, 딕셔너리, 세트, String 등이 포함
배열 - Array
1. 빈 배열 생성
var arr: [Int] = []
var arr: [Int] = [Int]()
var arr: [Int] = Array()
var arr: [Int] = Array<Int>()
2. 선언과 생성
var arr: [String] = ["a", "b", "c"]
var arr: Array<String> = ["a", "b", "c"]
딕셔너리 - Dictionary
- 참고로 순서가 없음
1. 빈 딕셔너리 생성
var dic: [String:Int] = [:]
var dic: [String:Int] = [String:Int]()
var dic: Dictionary<String, Int> = Dictionary<String, Int>()
2. 선언과 생성
var dic: [String:Int] = ["Jin": 100, "Min": 80, "Ki": 95]
3. 사용
print(dic["Jin"]) // 접근
dic["Jin"] = 100 // 값 수정
dic["Sue"] = 66 // 값 추가
세트 - Set
- 집합과 같은 역할. 순서가 없고, 중복값도 없음
- 다양한 method 사용 가능
1. 생성
var name: Set<String> = Set<String>()
var name: Set<String> = []
2. 선언과 생성
var name: Set<String> = ["a", "b", "c"]
3. 사용
var 짝수: Set<Int> = [2, 4, 6, 8]
let 홀수: Set<Int> = [1, 3, 5, 7]
let 자연수: Set<Int> = 짝수.union(홀수)
짝수.insert(3) // 원소 추가
짝수.remove(3) // 삭제
print(짝수.count)
print(홀수.isDisjoint(with: 짝수)) // 서로 배타적인지
print(짝수.isSubset(of: 자연수)) // 짝수가 자연수의 부분집합인지
print(자연수.isSuperset(of: 짝수)) // 자연수가 짝수의 전체집합인지
열거형 - Enum
- 연관된 항목들을 묶어서 표현
- 추가/수정 불가
1. 선언
enum Grade {
case A
case B
case C
case D
case F
}
enum Grade { case A, B, C, D, F }
2. 생성, 사용
var myGrade: Grade = Grade.A
var yourGrade: Grade = .A
yourGrade = .B // 변경
3. 원시 값 지정
- 정수 타입이면 원시값이 0부터 1씩 증가하여 할당됨
enum WeekDays: Character {
case mon = "월", tue = "화", wed = "수"
}
let today: WeekDays = WeekDays.tue
print(today.rawValue) // '화' 출력
let tomorrow = WeekDays(rawValue: "수") // wed
4. 연관값
enum MainDish {
case pasta(taste: PastaTaste)
case pizza(dough: String, topping: String)
case rice
}
enum PastaTaste {
case cream, tomato
}
var dinner: MainDish = MainDish.pasta(taste: PastaTaste.cream)
5-1. 항목순회
- 열거형의 이름 뒤에 콜론(:) 작성하고 CaseIterable 프로토콜 채택
- 열거형에 allCases 타입프로퍼티를 통해 모든 케이스의 컬렉션 생성
- 연관값을 같는 경우 allCases 프로퍼티 직접 구현해야 함
enum Grade: CaseIterable {
case A
case B
case C
case D
case F
}
enum WeekDays: Character, CaseIterable {
case mon = "월", tue = "화", wed = "수"
}
let allCases: [Grade] = Grade.allCases
print(allCases) // [Grade.A, Grade.B, Grade.C, Grade.D, Grade.F]
5-2. 순환 열거형
- enum 항목의 연관 값이 자신의 값이고자 할 때 사용
- enum 키워드 앞에 indirect 붙이거나, case 키워드 앞에 indirect 붙여서 사용
indirect enum ArithmeticExpression {
case number(Int)
case addition(ArithmeticExpression, ArithmeticExpression)
case multiplication(ArithmeticExpression, ArithmeticExpression)
}
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let final = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
func evaluate(_ expression: ArithmeticExpression) -> Int {
switch expression {
case .number(let value):
return value
case .addition(let left, let right):
return evaluate(left) + evaluate(right)
case .multiplication(let left, let right):
return evaluate(left) * evaluate(right)
}
}
let result: Int = evaluate(final)
print("(5 + 4) * 2 = \(result)")
'swift' 카테고리의 다른 글
[swift] 옵셔널 (0) | 2020.04.28 |
---|---|
[swift] 메소드 (method) (0) | 2020.04.27 |
[swift] 프로퍼티(property) (0) | 2020.04.15 |
[swift] 구조체(struct)와 클래스(class) 비교 (0) | 2020.04.08 |
[swift] 연산자 (0) | 2020.04.06 |