//

//  ShowBibleVC.swift

//  JooBo

//

//  Created by MacBookPro on 2018. 6. 12..

//  Copyright © 2018년 MacBookPro. All rights reserved.

//


import UIKit


class ShowBibleVC: UIViewController {

    

    //

    let commentTextView: UITextView = {

        let textView = UITextView()

        textView.backgroundColor = UIColor(red:0.92, green:0.92, blue:0.92, alpha:1.0)

        textView.translatesAutoresizingMaskIntoConstraints = false

        textView.text = "성경말씀 본문"

        textView.font = UIFont(name: "NanumMyeongjo-YetHangul", size: 14)

        //textView.textAlignment = .center

        textView.isEditable = false

        textView.layer.borderWidth = 0.3

        textView.layer.cornerRadius = 5

        textView.clipsToBounds = true

        //textView.isScrollEnabled = false

        return textView

    }()

    

    //취소 함수

    @objc func cancelAction(){

        self.dismiss(animated: true, completion: nil)

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "닫기", style: .plain, target: self, action:  #selector(cancelAction))

        view.backgroundColor = .yellow

        onPostShowBible()

        

        //onHttpRequest()

        

        

        view.addSubview(commentTextView)

        

        commentTextView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true

        commentTextView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        commentTextView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

        commentTextView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true

        

    }

    

    

    func onPostShowBible(){

        var bibletext = ""

        print("포스트 방식 데이터 가지러옴")

        // 1. 전송할 값 준비

        //2. JSON 객체로 변환할 딕셔너리 준비

        //let parameter = ["create_name" : "kkkkkkkk", "create_age" : "909090"]

        //let postString = "create_name=13&create_age=Jack"

        // 3. URL 객체 정의

        guard let url = URL(string: "http://169.254.232.102:3003/bible_search") else {return}

        

        // 3. URLRequest 객체 정의 및 요청 내용 담기

        var request = URLRequest(url: url)

        request.httpMethod = "POST"

        // 4. HTTP 메시지에 포함될 헤더 설정

        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

        //request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        let body = "maintext=히브리서&jang=11&jeol=1&jeol2=10".data(using:String.Encoding.utf8, allowLossyConversion: false)

        request.httpBody = body

        

        

        // 5. URLSession 객체를 통해 전송 및 응답값 처리 로직 작성

        let session = URLSession.shared

        session.dataTask(with: request) { (data, response, error) in

            if let res = response{

                print(res)

            }

            

            if let data = data {

                

                do{

                    let json = try JSONSerialization.jsonObject(with: data, options: [])

                    print(json)


                   

                    guard let newValue = json as? Array<Any> else {

                        print("invalid format")

                        return

                    }

                    

                    for item in newValue{

                        

                        if let data = item as? [String:Any]{

                            

                            if let book = data["book"] , let chapter = data["chapter"] ,let verse = data["verse"] ,let content = data["content"]{

                                

                        print( String(describing: book) + String(describing: chapter) + String(describing: verse) + String(describing: content))

                                //print(book)

                               // print(chapter)

                               // print(verse)

                               // print(content)

                                 bibletext += String(describing: book) + String(describing: chapter) + String(describing: verse) + String(describing: content)

                            }

    

                        }

                    }

                    DispatchQueue.main.async {

                        

                        self.commentTextView.text = "\(bibletext)"

                    }

                    

                    // Check for the weather parameter as an array of dictionaries and than excess the first array's description

//                    if let verse = newValue["verse"], let chapter = newValue["chapter"],let book = newValue["book"],let content = newValue["content"] {

//                        print(verse)

//                        print(chapter)

//                        print(book)

//                        print(content)

//                    }

                    

                    

//                    let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers)

//                    if let items = jsonResult["items"] as! NSArray { for item in items { print(item["published"]) print(item["title"]) print(item["content"]) } }

                    

                    

                    //Convert to Data

                   // let jsonData = try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted)

                    

                    //Convert back to string. Usually only do this for debugging

                    //if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {

                    //    print(JSONString)

                    //}

                    

                    

                }catch{

                    print(error)

                }

            }

            // 6. POST 전송

            }.resume()

        

    }

    


    

   

    

    func onHttpRequest() {

        

        

        //URL생성

        guard let url = URL(string: "http://169.254.232.102:3003/users") else {return}

        

        var request = URLRequest(url: url)

        request.httpMethod = "get" //get : Get 방식, post : Post 방식

        

        let session = URLSession.shared

        let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in

            //error 일경우 종료

            guard error == nil && data != nil else {

                if let err = error {

                    print(err.localizedDescription)

                }

                return

            }

            

            //data 가져오기

            if let _data = data {

                if let strData = NSString(data: _data, encoding: String.Encoding.utf8.rawValue) {

                    let str = String(strData)

                    print(str)

                    //메인쓰레드에서 출력하기 위해

                    DispatchQueue.main.async {

                        print(str)

                    }

                }

            }else{

                print("data nil")

            }

        })

        task.resume()

        

    }

    

    func onPostShowBible2(){

        

        print("포스트 방식 데이터 가지러옴")

        // 1. 전송할 값 준비

        //2. JSON 객체로 변환할 딕셔너리 준비

        let parameter = ["create_name" : "kkkkkkkk", "create_age" : "909090"]

        //let postString = "create_name=13&create_age=Jack"

        // 3. URL 객체 정의

        guard let url = URL(string: "http://169.254.251.88:3003/user_create") else {return}

        // 3. URLRequest 객체 정의 및 요청 내용 담기

        var request = URLRequest(url: url)

        request.httpMethod = "POST"

        // 4. HTTP 메시지에 포함될 헤더 설정

        

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        let body = "create_name=mylove&create_age=1212".data(using:String.Encoding.ascii, allowLossyConversion: false)

        request.httpBody = body

        

        // 5. URLSession 객체를 통해 전송 및 응답값 처리 로직 작성

        let session = URLSession.shared

        session.dataTask(with: request) { (data, response, error) in

            if let res = response{

                print(res)

            }

            

            if let data = data {

                

                do{

                    let json = try JSONSerialization.jsonObject(with: data, options: [])

                    print(json)

                }catch{

                    print(error)

                }

            }

            // 6. POST 전송

            }.resume()

        

    }

    

}



'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

swift http 통신 get방식 post 방식 - 일단 기록  (0) 2018.06.13
11. 클래스와 구조체  (0) 2017.12.04
10. 옵셔널  (0) 2017.12.04
9. 연산자의 종류  (0) 2017.11.15
8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14



11. 클래스


//: Playground - noun: a place where people can play


import UIKit


//1

//구조체 정의

struct info {

    var name: String

    var age: Int

}



//2

//구조체 인스턴스의 생성 및 초기화

// 프로퍼티 이름(name, age)로 자동 생성된 이니셜라이저를 사용하여 구조체를 생성한다.

var meinfo: info = info(name:"kang", age:24)

meinfo.age = 100     //변경가능

meinfo.name = "sola" //변경가능


let youinfo: info = info(name:"hong", age:55)

// youinfo.age = 200       //변경불가 오류!

// youinfo.name = "dong"   //변경불가




//3 클래스


class Person{

    

    var height: Float = 0.0

    var weight: Float = 0.0

    

}


//3-1

//인스턴스가 생성되고 초기화 된후 프로퍼티 값에 접근하고 싶다면 마침표를 사용하면 된다.

// 구조체와 다르게 클래스의 인스턴스는 참조타입이므로 클래스의 인스턴스를 상수 let으로 선언해도 내부 프로퍼티 값을 변경할 수 있다.


var abcnt: Person = Person()

abcnt.height = 123.4

abcnt.weight = 123.4


let mom: Person = Person()

mom.height = 333.3

mom.weight = 222.2


//4

//생성과 소멸

//인스턴스는 참조 타입이므로 더는 참조할 필요가 없을 때 메모리에서 해제 된다.

// 이과정을 소멸이라고 하는데 소멸되기 직전 deinit이라는 메서드가 호출 된다.

//클래스 내부에 deinit메서드를 구현해주면 소멸되기 직전에 호출 된다, 클래스당 하나만 구현할 수 있다. 매개변수와 반환값을 가질 수 도 있다.

class Person2{

    

    var height: Float = 0.0

    var weight: Float = 0.0

    

    deinit {

        print("person2클래스의 인스턴스가 소멸된다.")

    }

}


var yaya: Person2? = Person2()

yaya = nil // person클래스의 인스턴스가 소멸된다.



/*

 구조체와 클래스 차이

 같은점:

 - 값을 저장하기 위해 프로퍼티 사용가능, 기능 실행을 위해 메서드 정의 가능,

 - 서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값(프로퍼티)에 접근하도록 서브스크립트를 정의 할 수 있다.

 - 초기화 될때의 상태를 저장하기 위해 이니셜라이저를 정의 할 수 있다.

 - 초기구현과 더불어 새로운 기능을 추가하기 위해 익스텐션 기능을 통해 확장할 수 있다.

 - 특정 기능을 실행하기 위해 특정 프로토콜을 준수할 수 있다.

 

 다른점:

 - 구조체는 상속할 수 없다.

 - 타입캐스팅은 클래스의 인스턴스에서만 허용된다.

 - 디이니셜라이저는 클래스의 인스턴스에서만 활용할 수 있다.

 - 참조 횟수 계산은 클래스의 인스턴스에만 적용된다.

 

 *핵심

  클래스는 참조타입이라서 전달될때 참조(주소)가 전달되고

  구조체는 값이 전달 된다.

 */


struct Myinfo2 {

    let name: String

    var age: Int

}


var naInfo: Myinfo2 = Myinfo2(name: "gildong", age: 60)

naInfo.age = 100


// naInfo의 값을 복사하여 할당한다.


var friendInfo: Myinfo2 = naInfo


print("na age: \(naInfo.age)")  //100

print("na age: \(friendInfo.age)") //100


friendInfo.age = 999


print("na age: \(naInfo.age)")  //100

print("na age: \(friendInfo.age)") //999 friendInfo는 naInfo의 값을 복사해왔기 때무넹 벼개의 값을 갖는다.


// ---------------------------------------------------------------------------------------------------  //


class Animal {

    

    var height: Float = 0.0

    var weigth: Float = 0.0

    

}


var tiger: Animal = Animal()

var rabit: Animal = tiger


print("tiger s heigth \(tiger.height)") //0.0

print("rabit s heigth \(rabit.height)") //0.0


rabit.height = 2.0


print("tiger s heigth \(tiger.height)") //2.0

print("rabit s heigth \(rabit.height)") //2.0


//rabait과 tiger가 참조는 곳이 같아서 하나만 바꿔줘도 전체가 바뀐다.



func changeBasicInfo(_ info: Myinfo2){

    var copiedInfo: Myinfo2 = info

    copiedInfo.age = 1

}


func changeAnimaInfo(_ info: Animal){

    

    info.height = 5.5

}


//이 함수로 전달되는 전달인자는 값이 복사되어서 전달되기 때문에 값만 전달 된다.

changeBasicInfo(naInfo)

print("na age: \(naInfo.age)") //100


//참조값이 전달 되었다.

changeAnimaInfo(tiger)

print("tiger height: \(tiger.height)") //2.2









































'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

swift http 통신 get방식 post 방식 - 일단 기록  (0) 2018.06.13
11. 클래스와 구조체  (0) 2017.12.04
10. 옵셔널  (0) 2017.12.04
9. 연산자의 종류  (0) 2017.11.15
8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14

10. 옵셔널


//: Playground - noun: a place where people can play

//값이 있을 수도 있고 없을 수도 있음을 나타낸다.

//변수나 상수 등에 꼭 값이 있다는 것을 보장할 수 없다.(변수 또는 상수의 값이 nil일 수도 있다.)

import UIKit



//1

var myName: String = "kim do do"

//오류 nil은 String 타입에 할당 될 수 없다.

//myName = nil


//2

//nil은 옵셔널로 선언된 곳에서만 사용될 수 있다.

//옵셔널 변수의 선언 및 nil 할당

var yourName: String? = "kang do"

print(yourName) //Optional("kang do")

yourName = nil

print(yourName) //nil


//3

//옵셔널은 어느 상황에 사용해야 하나?

/* 우리가 만든 함수에 전달되는 전달인자의 값이 잘못된 값일 경우 제대로 처리하지 못했음을 nil을 반환하여 표현*/



//4

//원시 값을 통한 열거형 초기화 100 p

//let primary = School(rawValue: "유치원")

//let graduate = School(rawValue:"석박사")


//let one = Numbers(rawValue:1) //one

//let three = Numbers(rawValue:3) //nil


/*  설명:이 예제에서는 데이터 타입을 명시하지 않고 타입 추론 기능을 사용했다. 이유는 nil을 할당하는 경우가 생기기 때문이다.

    컴파일러는 primary, graduate 상수의 데이터 타입을 school? 이라고 추론했을 것이다.

    이때 원시 값이 열거형의 case에 해당하지 않으면 열거형 인스턴스 생성에 실패하여 nil을 반환한다.

*/



//5 옵셔널 열거형의 정의


public enum Optional<Wrapped> : ExpressibleByNilLiteral {

    case none

    case some(Wrapped)

    

    public int(_ some: Wrapped)

    // 중략

}


//설명: 옵셔널은 제네릭이 적용된 열거형이다. ExpressibleByNilLiteral 프로토콜을 따른다.

//      옵셔널은 값을 가지는 케이스와, 그렇지 못한 케이스 두가지로 정의되어 있다.

//      nil일 때는 none 케이스가 되고, 값이 있느 경우에는 some 케이스가 된다.(옵셔널에 값이 있으면 some의 연관값인 wrapped에 값이 할당 된다.)



// 6

//      옵셔널 자체가 열거형이기 때문에 옵셔널 변수는 switch 구문을 통해 값이 있고 없음을 확인 할 수 있다.

func checkOptoinalValue(value optionalValue: Any?){

    

    switch optionalValue{

    case .none:

        print("옵셔널 변수는  nil입니다.")

    case .some(let value):

        print("value is \(value)")

    }

    

}




//7 switch를 통한 옵셔널 값의 확인


let numbers: [Int?] = [2, nil, -4, nil, 100]


for number in numbers{

    

    switch number {

    case .some(let value) where value < 0:

        print("negative value \(number)")

    case .some(let value) where value > 10:

        print("large value!!\(value)")

    

    case .some(let value):

        print("value \(value)")

    case .none:

        print("nil")

    default:

        break

    }

}

//결과

//value 2

// nil

//negative value! -4

//nil

// large value!! 100





//8

//옵셔널 추출: 열거형의 some 케이스로 숨어 있는 옵셔널의 값을 옵셔널이 아닌 값으로 추철하는 법

//두 가지 ( 강제추출, 바인딩)

//1. 강제 추출(옵셔널의 값을 강제 추출하려면 옵셔널 값의 두에 느낌표! 를 붙여주면 값을 강제로 추출해서 반환한다. 지양해야함..)


var name: String? = "dongsoo"

//옵셔널이 아닌 변수에는 옵셔널 값이 들어갈 수 없다! 그래서 추출해서 할당해줘야 한다.

var me: String = name!


name = nil

me = name!      //런타임 오류(강제 추출시 옵셔널에 값이 없다면, 즉 nil이라면 런타임 오류가 발생한다)



//if 구문을 이용해서 조금 더 안전하게 처리 할 수 있다.


if name != nil {

    print("my name is \(name)")

}else{

    print("my name == nil")

}

//myName == nil




//2. 옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용한다.

// 만약 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 옵셔널이 아닌 형태로 사용할 수 있도록 한다.


var hisName: String? = "silver"


//옵셔널 바인딩을 통한 임시 상수 할당

if let nname = hisName {

    print("his name is \(nname)")

} else {

    print("myname == nil")

}

//결과:his name is silver



//옵셔널 바인딩을 통한 임시 변수 할당

if var nnnmae = hisName {

    nnnmae = "gold" //변수이므로 내부에서 변경가능

    print("his name is \(nnnmae)")

}else{

    print("his name == nil")

}

//결과:his name is gold



//옵셔널 바인딩을 사용한 여러 개의 옵셔널 값의 추출

var herName: String? = "green"

var ourName: String? = nil


//friend에 바인딩 되지 않으므로 실행되지 않는다. nil 이라서

if let name = herName, let friend = ourName {

    print("we are friend")

}


ourName = "world"


if let name = herName, let friend = ourName {

    print("we are friend \(name), \(friend)")

}



//암시적 추출 옵셔널

//때때로 nil을 할당하고 싶지만, 옵셔널 바인딩으로 매번 값을 추출하기 귀찮거나 로직상 nil때문에 런타임 오류가 발생하지 않을 것 같다는 확신이 들때,

//nil을 할당해줄 수 있는 옵셔널이 아닌 변수나 상수가 있으면 좋다. 이때 사용하는 것이 암시적 추출 옵셔널 이다.

//옵셔널을 사용하고자 뒤에 ?를 붙였지만, 암시적 추출 옵셔널을 사용하려면 타입 뒤에 느낌표를 ! 사용해 주면 된다.


var thiereName: String! = "gilbert"

print(thiereName) // gilbert

thiereName = nil


//암시적 추출 옵셔널도 옵셔널이므로 당연히 바인딩을 사용할 수 있다.

if var name2 = thiereName {

    print("thiere name is \(name2)")

} else{

    print("thiere name == nil")

}


//thiere name == nil

//thiereName.isEmpty // 오류



//옵셔널을 사용할때는 강제적 추출, 암시적 추출 옵셔널을 사용하는 것 보다 옵셔널 바인딩, nil 병합 연산자를 비롯해

//뒤에서 배울 옵셔널 체이닝 등의 방법을 사용하는 편이 훨씬 안전하다.
















'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

swift http 통신 get방식 post 방식 - 일단 기록  (0) 2018.06.13
11. 클래스와 구조체  (0) 2017.12.04
10. 옵셔널  (0) 2017.12.04
9. 연산자의 종류  (0) 2017.11.15
8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14





// 할당연산자       = 


// 산술 연산자      + - * / % 


//비교연산자



// 참조 비교 연산자

let valueA: Int = 3

let valueB: Int = 5

let valueC: Int = 5

class SomeClass{}


//let isSameValue: Bool = valueA == valueB // false

let isSameValue: Bool = valueB == valueC // true



print(isSameValue)



let referenceA: SomeClass = SomeClass()


let referenceB: SomeClass = SomeClass()


let referenceC: SomeClass = referenceA



let isSameReferenceAB: Bool = referenceA === referenceB //false

let isSameReferenceAC: Bool = referenceA === referenceC //false



//삼항 조건 연산자 

// 질의 ? A : B 

// 질의 값이 참이면 A , 거짓이면 B

var valueAA: Int = 3

var valueBB: Int = 5

var biggerValue: Int = valueAA > valueBB ? valueAA : valueBB //5


print(biggerValue)


valueAA = 0

valueBB = -3


biggerValue = valueAA > valueBB ? valueAA : valueBB    //0


print(biggerValue)



var stringA: String = ""

var stringB: String = "String"

var resultValue: Double = stringA.isEmpty ? 1.0 : 0.0 //1.0

resultValue = stringB.isEmpty ? 1.0 : 0.0 //0.0


print(resultValue)






//범위 연산자



//부울 연산자

//not  !B     AND    A&&B      OR  A||B


//비트 연산자


//복합 할당 연산자



출처: 스위프트 프로그래밍










'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

11. 클래스와 구조체  (0) 2017.12.04
10. 옵셔널  (0) 2017.12.04
9. 연산자의 종류  (0) 2017.11.15
8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14
6. 복습정리  (0) 2017.11.14
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//열거형 : 열거형은 연관된 항목들을 묶어서 표현할 수 있다.
// 배열이나 딕셔너리 같은 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 
// 추가/수정이 불가하다
//그렇기 때문에 딱 정해진 값만 열거형 값에 속할 수 있다.
 
enum School{
    
    case primary //유치원
    case elementary //초등
    case middle //중등
    case high //고등
    case college //대학
    case university // 대학교
    case graduate //대학원
}
 
 
 
//School열거형 변수의 생성 및 값 변경
 
var highestEducationLevel: School = School.university
 
//같은 표현
//var highestEducationLevel: School = .university
 
//같은 타입인 School 내부의 항목으로만 highestEducationLevel의 값을 변경 가능
highestEducationLevel = .graduate
 
print(highestEducationLevel)
 
//원시값: 열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시값도 가질 수 있다.
 
//예)
 
enum School2: String{
    
    case primary = "유치원"
    case elementary = "초등"
    case middle = "중등"
    case high = "고등"
    case college = "대학"
    case university = "대학교"
    case graduate = "대학원"
}
 
 
 
let highestEducationLevel2: School2 = School2.university
print("저의 최종학력은 \(highestEducationLevel2)")
 
 
 
 
enum WeekDays: Character {
    
    case mon = "월", tue = "화", wed = "수", thu = "목", fri = "금", sat = "토", sun="일"  
    
}
 
 
 
let today: WeekDays = WeekDays.fri
print("오늘은 \(today)")
 
 
 
 
 
//열거형의 원시 값 일부 지정 및 자동 처리
 
 
enum School3: String{
    
    case primary = "유치원"
    case elementary = "초등"
    case middle = "중등"
    case high = "고등"
    case college 
    case university 
    case graduate
}
 
let level: School3 = School3.university
print("저의 최종학력은\(level.rawValue)")
 
print(School3.elementary.rawValue) // 초등학교
 
 
 
 
 
 
enum Numbers: Int {
    
    case zero
    case one
    case two
    case ten = 10
}
 
 
print("\(Numbers.zero.rawValue)")   // 0
 
 
//원시값을 통한 열거형 초기화
 
 
let one = Numbers(rawValue: 1);    //one
let three = Numbers(rawValue: 3); // nil
 
 
print("\(one)")
//print("\(three)") nil
 
 
 
 
 
//연관값을 갖는 열거형
 
enum MainDish{
    case pasta(taste: String)
    case pizza(dough:String, topping: String)
    case chicken(withSauce: Bool)
    case rice
}
 
var dinner: MainDish = MainDish.pasta(taste: "크림");
 
dinner = .pizza(dough: "치즈크러스트", topping:"불고기");
 
dinner = .chicken(withSauce: true
 
dinner = .rice //
 
 
 
 
 
 
 
 
 
 
 
cs


'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

10. 옵셔널  (0) 2017.12.04
9. 연산자의 종류  (0) 2017.11.15
8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14
6. 복습정리  (0) 2017.11.14
5.함수 조건문 반복문  (0) 2017.11.08
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
 
 
 
 
 
 
 
 
//튜플 - 지정된 데이터의 묶음
//예1)
 
 
var person: (StringInt, Double) = ("kang",100,145.2)
 
//인덱스를 통해 값을 빼 올 수 있다.
print("\(person.0),\(person.1),\(person.2)")
 
//값 할당
person.1 = 99;
person.2 = 140.3
 
 
print("\(person.0),\(person.1),\(person.2)")
 
 
//예2)튜플 이름 요소 지정
var person2: (name:String, age: Int, height: Double) = ("kang",100,123.3)
 
//요소 이름 통해서 값 가져오기
print("\(person2.name),\(person2.age),\(person2.height)")
 
person2.age = 22
person2.2 = 123
 
 
print("\(person2.0),\(person2.1),\(person2.2)")
 
 
//예3
 
typealias PersonTuple = (name:String, age: Int, height: Double)
 
let kang: PersonTuple = ("kang",100,123.3)
let kim: PersonTuple = ("kim",200,223.3)
 
 
 
print("\(kang.name),\(kang.age),\(kang.height)")
 
print("\(kim.name),\(kim.age),\(kim.height)")
 
 
 
 
 
//  array 같은 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입
// isEmpy - 빈 배열 확인
// count - 배열 요소 개수 확인
 
 
 
var names: Array<String> = ["abcnt","chulsoo","younghee","yahoo"]
 
//var names: [String] = ["abcnt","chulsoo","younghee","yahoo"] 위와 같음
 
var emptyArray: [Any] = [Any]() //any데이터를 요소로 갖는 빈 배열 생성
//var emptyArray: [Any] = Array<Any>() 위와 같음
 
//배열의 타입을 정확히 명시해줬다면 [] 만으로도 빈 배열을 생성할 수 있습니다.
 
//var emptyArray: [Any] = [] 위와 같음
 
print(emptyArray.isEmpty)
print(names.count)
 
 
print(names[2])
names[2= "abcabc"
print(names[2])
//print(names[4]) 오류
 
// names[4] = "elsa" 범위 벗어나서오류
 
names.append("elsa")
names.append(contentsOf:["aaaa","bbbb"])
names.insert("happy",at:2// 인덱스 2에 삽입
names.insert(contentsOf:["gggg","hhh"], at:5)
 
 
 
 
 
print(names[5])
 
//print(names.index(of: "abcabc"))
//print(names.index(of: "abcabc123"))
 
print(names.first)
print(names.last)
print(names)
 
 
 
 
 
let firstItem: String = names.removeFirst()
let lastItem: String = names.removeLast()
let indexZeroItem: String = names.remove(at: 0)
 
print(firstItem)
 
print(lastItem)
 
 
print(indexZeroItem)
 
 
print(names[1 ... 3])
 
 
 
 
 
 
 
//  딕셔너리
//  키 : 값
 
 
 
//타입 알리아스를 이용
typealias StringIntDic = [String:Int]
 
 
// 키는 String, 값은 Int
//var numberForName: Dictionary<String,Int> = Dictionary<String,Int>()
//var numberForName: [String: Int] = [String: Int]()
//var numberForName: StringIntDictionary = StringIntDictionary()
//var numberForName: [String: Int] = [:]
 
 
//초기값 주어서 생성하기
var numberForName: [StringInt= ["kang":100"chulsoo":200"kim":433]
print(numberForName.isEmpty)
print(numberForName.count)
 
 
 
 
print(numberForName["kang"])
 
numberForName["kang"= 500;
 
print(numberForName["kang"])
 
 
 
numberForName["hong"= 5500;
 
print(numberForName["hong"])
 
//키에 해당하는 값 삭제
print(numberForName.removeValue(forKey: "kang"))
 
print(numberForName.removeValue(forKey: "kang")) // 해당하는 값 없으면 nil 반환
 
 
//print(numberForName["kang",default:2]) //0
 
 
 
 
 
//  set : 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우
// 세트의 선언과 생성
 
//var names4: Set<String> = Set<String>()  //빈 세트 생성
//var names4: Set<String> = []             // 빈 세트 생성
 
//array와 마찬가지로 대괄호 사용
var names4: Set<String> = ["abcnt","eeee","ccccc","bbbbb","abcnt"]
 
//그렇기 때문에 타입 추론을 사용하게 되면 컴파일러는 Set가 아닌 Array로 
//타입을 지정한다.
 
var numbers = [100,200,300]
print(type(of: numbers))
print(type(of: names4))
 
 
 
 
print(names.isEmpty); //false
print(names4.count)   //4
 
print(names4.count)   //4
 
names4.insert("hi")
 
 
print(names4.count)    //5
 
 
 
print(names4.remove("abcnt")) //abcnt 반환
 
 
print(names4.remove("fff")) //nil반환
 
 
 
 
 
//세트의 활용 - 집합 연산
 
 
let englishClass: Set<String> = ["a","b","c"];
 
let koreanClass: Set<String> = ["a","b","f","g"];
 
//교집합
let intersectSet: Set<String> = englishClass.intersection(koreanClass);
print(intersectSet);
 
 
//여집합의 합
let symmetricDiffSet: Set<String> = englishClass.symmetricDifference(koreanClass)
print(symmetricDiffSet)
 
 
//합집합
 
let unionSet: Set<String> = englishClass.union(koreanClass);
print(unionSet);
 
//차집합
 
let subtractSet: Set<String> = englishClass.subtracting(koreanClass)
print(subtractSet)
 
//정렬
 
print(unionSet.sorted())
 
 
 
 
 
let 새: Set<String> = ["비둘기","닭","기러기"];
let 포유류: Set<String> = ["사자","호랑이","곰"]
let 동물: Set<String> = 새.union(포유류)
 
 
print(새.isDisjoint(with:포유류)) // 서로 배타적인가? true
print(새.isSubset(of: 동물)) // 새가 동물의 부분집합인가요 -? true
print(동물.isSuperset(of:포유류)) // 동물은 포유류의 전체집합인가요?  true
print(동물.isSuperset(of:새)) // 동물은 새의 전체집합인가요 ? true
 
cs


'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

9. 연산자의 종류  (0) 2017.11.15
8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14
6. 복습정리  (0) 2017.11.14
5.함수 조건문 반복문  (0) 2017.11.08
4. 컬렉션 타입 array dictionary set  (0) 2017.11.08
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
//  Write some awesome Swift code, or import libraries like "Foundation",
//  "Dispatch", or "Glibc"
import Swift
let age:Int = 10;
let text: String = "MYSQL";
 
var introduce: String = String();
 
print("mysql!");
print("first \(age)");
print("first+ \(age+5)");
print("text is \(text)");
 
introduce.append("제이름은")
print(introduce)
introduce = introduce + text + "입니다";
print(introduce)
 
print("\(introduce.isEmpty)"); //비어있지 않으면 false
 
print("===================출력=====================");
 
class Person{
    
    var name: String = "todo";
    var age: Int = 10;
    
}
 
 
let me: Person = Person();
 
print(me)
 
dump(me)
 
 
 
print("==================변수 종류========================");
 
let constant: String = "차후에 변경 불가능 let";
 
var variable: String = "차후에 변경 가능 var";
 
 
variable = "변수 할당 가능";
//constant = "변수 할당 가능"; 에러 상수는 값 변경 불가
print("\(variable)");
print("\(constant)");
 
 
 
let sum: Int;
let inputA: Int = 100;
let inputB: Int = 200;
 
 
sum = inputA + inputB;
 
print("\(sum)");
 
var nickName: String
 
//print("\(nickName)"); 변수 값이 할당안되어서 오류
nickName = "kang";
print("\(nickName)");
 
 
//변수는 차후에 다시 다른 값을 할당해도 문제가 없다
nickName = "kim";
print("\(nickName)");
 
 
print("================데이터 타입==================");
//Bool, Int, UInt, Float, Double, Character, String
 
 /*
 Any - Swift의 모든 타입을 지칭하는 키워드
 AnyObject - 모든 클래스 타입을 지칭하는 프로토콜
 nil - 없음을 의미하는 키워드
 */
 
 
var someAny: Any = 100;
someAny = "어떤 타입도 수용가능"
someAny = 12.11
 
//let someDouble: Double = someAny;
//DOUBLE 타입에 ANY타입을 할당 못한다.
 
 
 
 
//클래스의 인스턴스만 가질 수 있다.
 
class SomeClass{}
var someAnyObject: AnyObject = SomeClass()
//someAnyObject = 123.12
//someAnyObject = 123.12 더블 타입을 넣으려고하면 오료
 
 
//someAny = nil; any 타입에 nil 넣을 수  없다.
//someAnyObject = nil; object 타입에 nil 넣을 수 없다.
 
 
print("===============배열==============");
 
/*
Array - 순서가 있는 리스트 컬렉션
Dictionary - 키와 값의 쌍으로 이루어진 컬렉션
Set - 순서가 없고, 멤버가 유일한 컬렉션
*/
 
var integers: Array<Int> = Array<Int>();
integers.append(1)
integers.append(100)
print("\(integers)");
 
print(integers.contains(100)); //true
print(integers.contains(99)); //배열에 없으니깐 false
 
 
integers.remove(at:0); //0번째 삭제
print("\(integers)");
integers.removeLast(); // 제일 마지막에 있는 요소 지우기
print("\(integers)");
integers.removeAll(); //다 지우기
print("\(integers)");
print(integers.count);
 
//integers[0] 0번째 인덱스에 접근할 수 있다.
 
 
//Array<String> 과 [String]은 동일한 표현
//빈 Double Array 생성
 
var doubles: Array<Double> = [Double]();
 
var string: [String= [String]();
 
// 빈 Character Array 생성
 
// [] 는 새로운 빈 Array 
 
var character: [Character] = []
 
// let을 사용하여 Array를 선언하면 불변 Array, 변경이 불가능 하다.
 
let immutableArray = [1,2,3];
//immutableArray.append(4); 오류
//immutableArray.removeAll(); 오류
 
 
 
// key가 String 타입이고 Value가 Any인 빈 Dictionary 생성
 
//key는 문자 타입, value는 any 타입
 
 
var anyDic: Dictionary<String, Any> = [String:Any]();
 
anyDic["keyone"= "joo";
anyDic["keytwo"= "kyuen";
anyDic["keythree"= "hi";
 
print(anyDic);
 
 
anyDic["keyone"= "joolove";
print(anyDic);
 
anyDic.removeValue(forKey:"keythree")
print(anyDic);
anyDic["keyone"= nil
print(anyDic);
 
 
 
let empty: [String:String= [:];
let initalize: [String:String= ["name":"kang","gender":"male"];
 
 
 
//pty:["key"]  "value";
 
 
var integersSet: Set<Int> = Set<Int>();
integersSet.insert(1);
integersSet.insert(100);
integersSet.insert(66);
integersSet.insert(132);
integersSet.insert(1123);
integersSet.insert(1123);
 
//순서가 없이 들어감, 중복된 값 제거 됨
print(integersSet);
 
 
print(integersSet.contains(100)); //true
 
print(integersSet.contains(200)); //false
 
integersSet.remove(100);
print(integersSet);
 
integersSet.removeFirst();
print(integersSet);
 
print(integersSet.count);
 
 
 
let setA: Set<Int> = [1,2,3,4,5];
let setB: Set<Int> = [3,4,5,6,7];
 
//합
let union: Set<Int> = setA.union(setB);
print(union);
 
//정렬
let sortedUnion: [Int= union.sorted();
print(sortedUnion);
 
//교집합
let intersection: Set<Int> = setA.intersection(setB);
print(intersection);
 
 
 
//차집합
let subtracting: Set<Int> = setA.subtracting(setB);
print(subtracting);
 
 
 
print("====================조건문=======================");
 
 
let someInteger = 100
 
 
if(someInteger < 100)
{
    print("100미만")
}else if(someInteger > 100)
{
    print("100초과")
}else
{
    print("100")
}
 
      
      
      
      switch someInteger
      {
          
          case 0
              print("제로");
          
          case 1...100:
              print("1-99");
          
          case 100:
              print("100");
          
          case 101...Int.max:
              print("over 100");
          
          default:
              print("unknown");
      }
 
 
 
switch "kang" {
 
 
 case "a"
 
        print("a")
 
 case "b":
 
        print("b")
 
 case "kang":
 
        print("kang")
 
  default:
 
        print("unknown")
 
}
 
 
cs


'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

8. 열거형  (0) 2017.11.15
7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14
6. 복습정리  (0) 2017.11.14
5.함수 조건문 반복문  (0) 2017.11.08
4. 컬렉션 타입 array dictionary set  (0) 2017.11.08
3.기본 데이터 타입 Any AnyObject nil  (0) 2017.11.08
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
 /* 함수 */
 
 
 
import Swift
 
 
 
// mark: - 함수의 선언
 
 
 
 
 
// mark: 함수 선언의 기본형태
 
 
 
//func 함수이름(매개변수1이름: 매개변수1 타입, 매개변수2이름:매개변수2 타입...) -> 반환타입 {
 
 
 
//    함수 구현부
 
//    return 반환값
 
 
 
//} 
 
 
 
 
 
 func sum(a:Int, b: Int-> Int{
 
    return a+b
 
 }
 
 
 
 //반환 값이 없는 함수
 
 
 
 //func 함수이름(매개변수1이름: 매개변수1타입...) -> Void{
 
 
 
//    함수 구현부
 
//    return
 
// }
 
 
 
 
 
 func printMyName(name: String-> Void {
 
    print(name)
 
 }
 
 
 
 
 
 //이렇게도 가능
 
  func printMyName(name: String) {
 
    print(name)
 
 }
 
 
 
 
 
 //매개변수가 없는 함수
 
 func exam() -> Int {
 
    return Int.max
 
 }
 
 
 
 
 
 //매개변수와 반환값이 없는 함수
 
 
 
 func hello() -> Void { print("hello") }
 
 func bye() {print("bye")}
 
 
 
 
 
 //함수의 호출
 
 
 
 sum(a:3, b:5//8
 
 
 
 printMyName(name:"kang"//kang
 
 
 
 hello() // hello
 
 
 
 bye() //bye
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 /* 조건문 */
 
 
 
 
 
import Swift
 
 
 
let someInteger = 100 
 
 
 
 
 
//mark: - if - else
 
 
 
if (someInteger < 100) {
 
 
 
    print("100 미만")
 
    
 
}  else if (someInteger > 100){
 
 
 
    print("100초과")
 
 
 
else{
 
 
 
    print("100")
 
    
 
}
 
 
 
//100
 
 
 
 
 
 
 
 //스위프트의 조건에는 항상 bool 타입이 들어와야 한다.
 
 //someInteger 는 Bool 타입이 아닌 Int 타입이기 때문에 
 
 // 컴파일 오류가 발생한다.
 
 // if (someInteger) {}
 
 
 
 
 
 
 
 // 범위 연산자를 활용하면 더욱 쉽고 유용하다
 
 
 
 
 
 switch someInteger {
 
 
 
 case 0
 
        print("zero")
 
 case 1..100:
 
        print("1~99")
 
 case 100:
 
        print("100")
 
 case 101...Int.max:
 
    print("over 100")
 
  default:
 
        print("unknown")
 
 
 
 }
 
 
 
 
 
 
 
 // 정수 외의 대부분의 기본 타입을 사용할 수 있다.
 
 
 
switch "kang" {
 
 
 
 case "a"
 
        print("a")
 
 case "b":
 
        print("b")
 
 case "kang":
 
        print("kang")
 
  default:
 
        print("unknown")
 
}
 
 
 
 
 
 
 
 /* 반복문 */
 
 
 
 import Swift 
 
 
 
 var integers = [1,2,3]
 
 let people = ["a"10 ,"b"14,"c"15 ]
 
 
 
 
 
 //for - in
 
 
 
 
 
 for integer in integers {
 
    print(integer)
 
 }
 
 
 
 
 
 for (name, age) in people {
 
    print("\(name):\(age)")
 
 }
 
  
 
 
 
 while integers.count> 1 {
 
    integers.removeLast()
 
 }
 
 
 
 
 repeat{
 
    integers.removeLast()
 
 } while integers.count > 0 
 
 
cs


'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

7. 튜플 배열 딕셔너리 셋 (복습)  (0) 2017.11.14
6. 복습정리  (0) 2017.11.14
5.함수 조건문 반복문  (0) 2017.11.08
4. 컬렉션 타입 array dictionary set  (0) 2017.11.08
3.기본 데이터 타입 Any AnyObject nil  (0) 2017.11.08
2. 상수, 변수  (0) 2017.11.07
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
 
 
5 컬랙션 타입
 
array, dictionary, set
 
 
 
 
import Swift
 
 
/*
Array - 순서가 있는 리스트 컬렉션
Dictionary - 키와 값의 쌍으로 이루어진 컬렉션
Set - 순서가 없고, 멤버가 유일한 컬렉션
*/
 
 
 
//MARK: -Array 
 
 
// 빈 Int Array 생성
 
var integers: Array<Int> = Array<Int>()  //[]
integers.append(1)                    // [1]
integers.append(100)                //[1,100]
//integers.append(101.1)
 
 
integers.contains(100//true
integers.contains(99)    //false
 
integers.remove(at:0//1
integers.removeLast() // 100 남는다
integers.removeAll() //[] 남는다
 
integers.count // 0
 
 
//integers[0]  0번째 인덱스에 접근 할 수 없다.
 
 
 
 //Array<Double> 와 [Double]는 동일한 표현
 //빈 Double Array 생성
 
 var doubles: Array<Double> = [Double]()   //[]
 
 //빈 String Array 생성
 var strings: [String= [String]()   //[]
 
 
 //빈 Character Array 생성
 // []는 새로운 빈 Array
 
 var characters: [Character] = []     //[]
 
 // let을 사용하여 Array를 선언하면 불면 Array, 변경이 불가능하다.
 let immutableArray = [1,2,3]             //[1,2,3]
 
 //immutableArray.append(4)
 //immutableArray.removeAll()
 
 
 
 
 //MARK: - Dictionary
 
 //Key가 String 타입이고 Value가 Any인 빈 Dictionary 생성
 
 
 //KEY는 문자 타입, VALUE는 Any
 var anyDictionary: Dictionary<String, Any> = [String:Any]()
 
anyDictionary["someKey"= "value"
anyDictionary["anotherKey"= 100
 
anyDictionary
 
 
 anyDictionary["someKey"= "dictionary"
 
 anyDictionary
 
 
 
 anyDictionary.removeValue(forKey:"anotherKey")  //100
 anyDictionary["someKey"= nil
 anyDictionary                            //아무것도 없다
 
 
 let emptyDictionary: [String:String= [:]
 let initalizedDictionary: [String:String= ["name":"kang","gender":"male"]
 
 //let 이기 때문에 값을 할당 할 수 없다.
 //emptyDictionary["key"] = "value" 
 //let someValue: String = initalizedDictionary["name"]  오류
 
 
 
 //MARK: - Set 
 
 // 빈 Int Set 생성
 
 var integerSet: Set<Int> = Set<Int>();
 integerSet.insert(1)
 integerSet.insert(100)
 integerSet.insert(99)
 integerSet.insert(99)            //중복된 값을 넣을 수 없다.
 integerSet.insert(99)
 
 integerSet
 
 integerSet.contains(1//true
 integerSet.contains(2//false
 
 integerSet.remove(100)        //100
 integerSet.removeFirst()        //99
 integerSet.count                    //1
 
 let setA: Set<Int> = [1,2,3,4,5]
 
 let setB: Set<Int> = [3,4,5,6,7]
 
 
 let union: Set<Int> = setA.union(setB)
 let sortedUnion: [Int= union.sorted()
 let intersection: Set<Int> = setA.intersection(setB)  //교집합
 let subtracting: Set<Int> = setA.subtracting(setB) //차집합
 
 
cs


'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

6. 복습정리  (0) 2017.11.14
5.함수 조건문 반복문  (0) 2017.11.08
4. 컬렉션 타입 array dictionary set  (0) 2017.11.08
3.기본 데이터 타입 Any AnyObject nil  (0) 2017.11.08
2. 상수, 변수  (0) 2017.11.07
1. 이름짓기, 콘솔로그, 문자열 보관법  (0) 2017.11.07
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
 
 3 기본 데이터 타입
 
 //Bool, Int, UInt, Float, Double, Character, String
 
 
 // Bool
 
 var someBool: Bool = true
 someBool = false
 //someBool = 0 오류, Int 타입 넣을 수 없다.
 //someBool = 1 오류
 
 //Int 
 var someInt: Int = -100
 //someInt = 100.1 오류, Double타입의 데이터를 넣어서 오류
 
 
 
 //UInt 양의 정수 타입
 var someUInt: UInt = 100
 //someUInt = -100, 음수를 넣으면 오류
 //someUInt = someInt  // UInt에 Int를 넣을 수 없다.
 
 
 //스위프트는 데이터 타입을 매우 중요시 한다.
 
 
 
 // Float 부동소수 타입
 var someFloat: Float = 3.14
 someFloat = 3
 
 
 //Double
 var someDouble: Double = 3.14
 someDouble = 3  //더블 타입에 정수를 넣어 줄 수  있다
 //someDouble = someFloat 더블 타입에 부동소스타입 Float을 넣을 수 없다.
 
 
 
 //Character
 var someCharacter: Character = "A"
 someCharacter = "가"
 someCharacter = "A"
 //someCharacter = "하하하" 문자열이라 안됨
 print(someCharacter)
 
 
 
 
 //String 
 var someString: String = "하하하"
 someString = someString + "와우"
 print(someString)
 
 //someString = someCharacter  불가능
 
 
 
 //다른 데이터 타입과 자료교환은 불가능 하다
 
cs






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
32
33
34
35
 
 4. import Swift
 
 
 /*
 Any - Swift의 모든 타입을 지칭하는 키워드
 AnyObject - 모든 클래스 타입을 지칭하는 프로토콜
 nil - 없음을 의미하는 키워드
 */
 
 //MARK: -Any
 
 var someAny: Any = 100 
 someAny = "어떤 타입도 수용 가능합니다."
 someAny = 123.12
 
//오류 
 let someDouble: Double = someAny
 //any 타입을 Double 타입에 할당할 수 없다.
 
 
 
 //클래스의 인스턴스만 가질 수 있다.
 //MARK: -AnyObject
 class SomeClass{}
 var someAnyObject: AnyObject = SomeClass()
 //someAnyObject = 123.12 // 더블 타입을 넣으려고 하면 오류
 
 
 //MARK: - nil
 
 someAny = nil // 빈값은 들어올 수 없다.
 someAnyObject = nil // 마찬가지다
 
 
cs


'ios 뽀개기 > 스위프트 정리' 카테고리의 다른 글

6. 복습정리  (0) 2017.11.14
5.함수 조건문 반복문  (0) 2017.11.08
4. 컬렉션 타입 array dictionary set  (0) 2017.11.08
3.기본 데이터 타입 Any AnyObject nil  (0) 2017.11.08
2. 상수, 변수  (0) 2017.11.07
1. 이름짓기, 콘솔로그, 문자열 보관법  (0) 2017.11.07

+ Recent posts

티스토리 툴바