본문 바로가기
아이폰 개발/Swift

[스탠포드]Swift 강좌 - ios 구조

by 인생여희 2021. 3. 9.

[스탠포드]Swift 강좌 - ios 구조

 

 

ios는 4개의 계층으로 구성되어 있다.

 

 

4계층 : Cocoa Touch(UIKit) : UI를 담당하는 부분. 버튼, 텍스트필드 등. Alerts, Core Motion, WebView, View Hierarchy, Map Kit, Image Picker, Controls, Camera, Multi-Touch 등

 

 

3계층 : Media : Core Audio, OpenAL, PDF, Audio Mixing, Audio Recording, Core Animation, Video PlayBack, OpenGL ES, JPEG, PNG, TIFF

 

 

2계층 : Core Service(Foundation) : Collections, Core Location, 주소록, Net Service, Threading, Networking, File Access, SqlLite, URL Utilities

 

 

1계층 : Core OS : BSD 계열의 unix 이다. 그래서 이 속에서 일어나는 모든 일들은 기본적으로 c언어를 기반으로 한다. 

 

Sockets, File System, Bonjour, Security, KeyChain Access, Certificates 관련 라이브러리들이 존재한다.

 

 

예제 자료  - 카드 뒤집기

 

 

ViewController.swift

주의

1.모든 클래스의 변수는 초기화를 해야만한다

1-1.옵셔널 타입은 초기화를 하지 않아도 된다.

2.초기화 방법은 2가지가 있다. 이니셜라이저(init) 사용, 직접 초기화 (var num = 0)

3.스위프트는 강한타입의 언어다.

4.스위프트는 타입추론이 가능한 언어다.

5.모든 속성은 속성 감시자 (didset, willset) 를 선언할 수 있다.

 

import UIKit

/*
 UIKit 라이브러리 : UI를 담당하는 부분. 버튼, 텍스트필드 등. Alerts, Core Motion, WebView, View Hierarchy,
 Map Kit, Image Picker, Controls, Camera, Multi-Touch 등
 UIViewController 는 UIKit에 포함되어 있다.
 */
class ViewController: UIViewController {

    //카운트 Int
    var flipCount = 0 {
        didSet{
            flipCountLabel.text = "count:\(flipCount)"
        }
    }
    
    //카운트 라벨
    @IBOutlet weak var flipCountLabel: UILabel!
   
    //카드 버튼 배열
    @IBOutlet var cardButtons: [UIButton]!
    
    //이모티콘 배열
    var emojiChoices : Array<String> = ["😃", "😎" , "😃" ,"😎"]
    
    //스위프트에는 모든 인자에는 이름이 있다.
    //외부 인자 이름, 내부 인자 이름
    @IBAction func touchCard(_ sender: UIButton) {
        print("hahah")
        flipCount += 1
        
        //버튼이 눌리면 배열얼 보고 눌러진 버튼을 찾아내면
        //어떤 카드인지 알 수 있다.
        //firstIndex 리턴 값은 옵셔널 값이다.
        let cardNumber = cardButtons.firstIndex(of: sender)
        
        //옵셔널의 값 구하기
        if let cardNum = cardNumber {
            //print("cardNum = \(cardNum)")
            flipCard(withEmoji: emojiChoices[cardNum], on: sender)
        }else{
            print("값이 없습니다.")
        }
    }
    
    
//    @IBAction func touchSecondCard(_ sender: UIButton) {
//        flipCount += 1
//        flipCard(withEmoji: "😜", on: sender)
//
//    }
    
    //카드 뒤집기 합수
    func flipCard(withEmoji emoji:String , on button: UIButton) {
        
        if button.currentTitle == emoji {
            
            button.setTitle("", for: .normal)
            button.backgroundColor = #colorLiteral(red: 0.9372549057, green: 0.3490196168, blue: 0.1921568662, alpha: 1)
        }else{
            
            button.setTitle(emoji, for: .normal)
            button.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
            
        }
    }
    
}

 

 

Concentration - 1.zip
0.03MB

 

 

참고 

www.edwith.org/swiftapp/lecture/26619/?isDesc=false