swift 1(데이터 타입)
2020.03.18
‘야곰. 스위프트 프로그래밍 3판. 한빛미디어’를 바탕으로 작성되었습니다.
2장 스위프트 처음 시작하기
기본적으로 문장 끝에 세미콜론은 붙이지 않아도 상관없습니다.
한 줄 끝을 명시적으로 보여주기 때문에 세미콜론 붙이는 방식을 좋아합니다.
문자열 보간법
문자열 + 연산 대신에 더욱 편리하게 문자열을 출력할 수 있는 방법
var name1: String = "Alice";
var name2: String = "Bob";
print("My name is " + name1 + ". Nice to meet you.");
print("My name is \(name2). Nice to meet you.");
변수 상수
- var : 변수
- let : 상수
- Javascript처럼 var을 생략해서 사용할 수 있지만, 저는 변수라고 명시적으로 보여주는 것을 더 선호하기 때문에 붙입니다.
3장 데이터 타입 기본
스위프트의 모든 데이터 타입 이름은 Upper Camel Case를 사용합니다.
- Int : 부호를 포함한 정수 (Int8, Int16, Int32, Int64)
- UInt : unsigned int (UInt8, UInt16, UInt32, UInt64)
- Float : 32bit 부동소수
- Double : 64bit 부동소수
- Character : 문자
- String : 문자열, 각종 문자열 method를 지원합니다. (append, hasPrefix, hasSuffix, uppercased, …)
- Any : 모든 데이터 타입을 사용할 수 있습니다. (타입 확인을 해야하기 때문에 지양하는 것이 좋을 듯 합니다.)
- AnyObject : 클래스의 인스턴스를 할당할 수 있습니다.
4장 데이터 타입 고급
Type alias
typealias MyString = String;
var str1: MyString = "Any String";
print(str1);
Tuple
Python의 튜플 또는 C언어의 구조체와 유사한 데이터 타입입니다.
시작번호는 0부터 입니다.
각 element마다 이름을 지정할 수 있습니다. 또한 생성한 튜플을 type alias해서 사용할 수 있습니다.
var box: (String, Int, Double) = ("box", 20, 3.5);
print("box0 : \(box.0), box1 : \(box.1), box2 : \(box.2)");
var goodBox: (name:String, price:Int, rate:Double) = ("Good Box", 30, 1.5); // element에 이름 지정
print("goodBox0 : \(goodBox.name), goodBox1 : \(goodBox.price), goodBox2 : \(goodBox.rate)");
typealias MyTuple = (name:String, price:Int, rate:Double); // type alias
var myBox: MyTuple = ("My Box", 5, 10.2);
print("myBox0 : \(myBox.name), myBox1 : \(myBox.price), myBox2 : \(myBox.rate)");
Array
Java Array와 비슷합니다.
var arr1: Array<String> = ["str1", "str2", "str3"];
var arr2: [String] = ["str1", "str2", "str3"];
print(arr1);
print(arr2);
print(arr1[0]);
print(arr1[1 ... 2]); // ["str2", "str3"]
Dictionary
var dict1: Dictionary<String, Int> = ["str1": 1, "str2": 2, "str3": 3];
var dict2: [String: Int] = ["str1": 1, "str2": 2, "str3": 3];
print(dict1 == dict2) // true
Set
Python Set 구조와 비슷합니다.
var set1: Set<String> = Set<String>();
var set2: Set<String> = []; // Array와 동일하게 대괄호를 사용
var set3: Set<String> = ["str1", "str2"];
열거형
원시 값
enum Sex{
case man, woman
}
var person1: Sex = Sex.man;
var person2: Sex = .woman;
print(type(of: person1)); // Sex (Not "man")
enum Days: String{
case sun = "일"
case mon = "월"
case tue = "화"
case wed = "수"
case thu = "목"
case fri = "금"
case sat = "토"
}
var day1: Days = Days.sun;
print(day1); // Days
print(day1.rawValue); // 일
연관 값
enum Dish{
case main(spicy: String)
case side(amount: String, sauce: String)
}
var myDish: Dish = Dish.main(spicy: "Hot");
print(myDish);
항목 순회
enum Days: String, CaseIterable{
case sun = "일"
case mon = "월"
case tue = "화"
case wed = "수"
case thu = "목"
case fri = "금"
case sat = "토"
}
let allCases: [Days] = Days.allCases;
print(allCases);
순환 열거형
- 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용
- 특정 항목에만 적용하고 싶다면 case 키워드 앞에 “indirect” 붙입니다.
- enum 전체에 적용하고 싶다면 enum 키워드 앞에 “indirect” 붙입니다.
enum ArithmeticExpression{
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
}
let five = ArithmeticExpression.number(5);
let six = ArithmeticExpression.number(6);
let sum = ArithmeticExpression.addition(five, six);
func evaluate(_ expression: ArithmeticExpression) -> Int {
switch expression {
case .number(let value):
return value;
case .addition(let left, let right):
return evaluate(left) + evaluate(right);
}
}
let result: Int = evaluate(sum);
print("5 + 6 = \(result)");
댓글남기기