swift 1(데이터 타입)

2 분 소요

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)");

카테고리:

업데이트:

댓글남기기