반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- IOS
- 큐
- Swift
- React #Web #프런트엔드
- MacOS
- Ai
- 스택
- 알고리즘
- 파이썬
- frontend
- dfs
- 모던자바스크립트
- 자바스크립트
- BAEKJOON
- JS
- JavaScript
- programmers
- 로보어드바이저
- SSAFY
- algorithms
- 신한투자증권
- 일임형
- 혁신금융서비스
- 자문형
- algoritms
- BFS
- Algorithm
- 자료구조
- Python
- 백준
Archives
- Today
- Total
Step by Step
Swift 기본문법(3) 본문
반응형
업 캐스팅
- 하위 클래스 타입을 상위 클래스 타입으로 캐스팅할 떄
- 캐스팅한 결과가 캐스팅하기 전 타입보다 추상화 될 때
- 일반적으로 오류가 발생할 가능성이 없음
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 |