Step by Step

Swift 기본문법(3) 본문

ios 앱 개발

Swift 기본문법(3)

짤진이 2025. 3. 25. 13:50
반응형

업 캐스팅

  • 하위 클래스 타입을 상위 클래스 타입으로 캐스팅할 떄
  • 캐스팅한 결과가 캐스팅하기 전 타입보다 추상화 될 때
  • 일반적으로 오류가 발생할 가능성이 없음

 

is연산자

is연산자는 타입 체크 연산자로써, 인스턴스가 특정 서브클래스 타입인지를 체크한다.

let subviews = [UITextField(), UISwitch(), UIImageView()]
for subview in subviews {
if subview is UITextField {
print("UITextField")
} else if subview is UISwitch {
print("UISwitch")
} else if subview is UIImageView {
print("UIImageView")
	}
}

 

 

 

타입 캐스팅 연산

업 캐스팅

  • 객체 as 변환할 타입

 

다운 캐스팅

  • 객체 as? 변환할 타입(옵셔널 타입으로 반환)
  • 객체 as! 변환할 타입(일반 타입으로 반환)

 

import UIKit
//타입 캐스팅 연산
class Vehicle{
    var currentSpeed = 0.0
    func accelerate() {
        currentSpeed += 1
    }
}

class Car:Vehicle{
    func wiper() {

    }
}
class SUV:Car{
    var fourWheel = false
}

//업캐스팅
let anyCar:Car = SUV() //손자 => 아버지
let anyVehicle = anyCar as Vehicle //아버지 => 할아버지
print("업캐스팅 성공 : \(anyVehicle)")

//다운캐스팅
let anySUV = anyCar as? SUV
if anySUV != nil{
    print("다운캐스팅 성공 : \(anySUV)")
}

//옵셔널 바인등으로 처리
if let anySUV = anyCar as? SUV {
    print("다운캐스팅 성공 : \(anySUV)")
}

//개발자가 확신
let anySUV2 = anyCar as! SUV
print("다운 캐스팅 성공 : \(anySUV2)")

 

File -> New -> Workspace -> DemoWorkspace

File -> New -> Project -> ios(App, Framework)

name -> DemoApp, MyComp

Identifier -> chanjin

Interface -> Storyboard

None

 

Add to, Group -> DemoWorkSpace

 

MyComp에 클래스 추가하기 -> New Empty File(BankAccount)

//BankAccount.swift
public class BackAccount{
    private var id = 0
    private var name = ""
    private var balance = 0
    public init(id:Int, name:String, balance:Int){
        self.id = id
        self.name = name
        self.balance = balance
    }
    // 입금과 출금
    public func deposit(amount:Int){
        self.balance += amount
    }
    public func withdraw(amount:Int){
        self.balance -=amount
    }
    public var ID:Int{
        get{return id}
        set{id = newValue}
    }
    public var name:String{
        get{return name}
        set{name = newValue}
    }
    public var balance:Int{
        get{return balance}
    }
}

 

command b => 빌드하기

DemoApp => Build Phases(참조 추가하기) => Link Binary with Libraries => MyComp.framework Add하기

DemoClosure.swift 생성하기

5장  DemoProtocol01

 

//ViewController.swift
import UIKit
//선언 추가
import MyComp

class ViewController: UIViewController{
    override func viewDidLoad(){
        super.viewDidLoad()

        let account:BankAccount(id:100,name:"전우치", balance:15000)
        account.deposit(amount:5000)
        account.withdraw(amount:3000)
        print("결과: \(account.ID), \(account.Name),\(account.Balance)")
    }
}

프로토콜

  • 프로토콜은 처리문을 가지지 않는 선언의 집합이다. 클래스 또는 구조체를 지정해서 그 프로토콜이 선언하고 있는 메소드를 구현한다.
  • 프로토콜을 사용해서 클래스나 구조체, 열거형을 정의하는 것을 프로토콜을 채택한다 라고 한다.
protocol Printable{
	var descriptuon:String{get}
}

클로저

클로저란 내부 함수와 내부 함수에 영향을 미치는 주변 환경을 모두 포함한 객체이다.

 

생략가능한 부분

var c1 = {()-> in print("Hello")}
var c2 = {()-> void in print("Hello")}
var c3 = {() in print("Hello")}
var c4 = {print("Hello")}

 

DemoClosure, ViewController

약 4가지의 형태로 표현이 가능하다

//DemoClosure, ViewController.swift
import UIKit
//선언 추가
class ViewController:UIViewController{

    func backwords(first:String, second:String) -> Bool {
        return first > second
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let names:[String] = ["전우치", "이순신", "박문수", "홍길동"]
        let reversed:[String] = names.sorted(by:backwords)
        print(reversed)

        //클로저로 구현
        let reversed2:[String] = names.sorted(by:
            {(first:String, second:String) -> Bool in 
            return first > second
        })
        print(reversed2)

        //후행 클로저
        let reversed3:[String] = names.sorted()
            {(first:String, second:String) -> Bool in 
            return first > second
        }
        print(reversed3)
        
        //가장 축약된 클로저
        let reversed4:[String] = name.sorted{$0 > $1}
        print(reversed4)
    }
}
반응형

'ios 앱 개발' 카테고리의 다른 글

Delegate 패턴  (0) 2025.03.26
ViewController 간 Data 교환  (0) 2025.03.26
Swift(Segueway 화면전환)  (2) 2025.03.26
Swift 기본문법(2) 옵셔널 바인딩, 초기화  (0) 2025.03.25
Swift 기본 문법 정리  (0) 2025.03.24