본문 바로가기

IT/Swift

(35)
[swift] guard [swift 기초문법] - guard, 빠른종료 (early return) guard문이란 guard 문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정하는것, guard 문에 주어진 조건문이 거짓일 때, 여기에 달려 있는 코드블럭이 실행됩니다. 조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는것보다 가독성이 높은 장점 있습니다. if 문과 다르게 else를 항상 달아야 합니다. 아래 함수는 nil 입력을 가드함. 만일 입력이 nil이면 guard문은 else 절을 수행하고 다른 구문이 수행되기 전에 함수를 return함 func guardInFunc (string: String?) { guard string != nil else ..
[swift] Protocol [swift 기초문법] - 프로토콜(Protocol) 프로토콜이란(Protocol) 프로토콜은 특정 작업 혹은 기능들을 구현하기 위한 메소드, 프로퍼티 그리고 기타 다른 요구사항들의 청사진입니다. 프로토콜을 클래스, 구조체 또는 열거형에서 채택(adopted)하여 이러한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 프로토콜의 요구사항을 모두 충족시키는 타입은 해당 프로토콜을 준수(conform)한다고 합니다. 프로토콜은 정의를 할 뿐이지 구현을 하지는 않습니다. 추가적으로, 프로토콜은 구현해야할 요구사항을 지정하는 것 이외에도, 프로토콜을 확장하여 이러한 요구사항 중 일부를 구현하거나, conforming타입에서 활용할 수 있는 추가 기능을 구현할 수 있습니다. 앞에 protocol 키워드를 붙여 ..
[swift] try? try! try [swift 기초문법] - try? try! try try 예외 상황 다루기 위한 방법의 do ~ catch 문 사용해야 온전히 에러 처리를 할 수 있습니다. 기능은 try~catch 방식과 동일.하며 Do문 내에서 try 한 메서드에 에러가 발생하면 앱이 종료되지 않고 catch 문에서 처리합니다. do {try} catch{}문을 모두 적어주지 않아도 간편히 에러처리 가능한 try?와 try!를 사용하는 것이 더 효과적입니다. do { y = try someThrowingFunction() } catch { y = nil } try? 에러 발생 시 nil 반환합니다. 에러가 발생하지 않으면 반환 타입은 옵셔널(Optional)입니다. 반환 타입이 없어도 사용 가능합니다. do-catch문 없이 사용가..
[swift] 스위프트의 특징 1. Enum형 변수가 Associated value(연관값)를 가질수 있다. enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) } var productBarcode = Barcode.upc(8, 85909, 51226, 3) productBarcode = .qrCode("ABCDEFGHIJKLMNOP") switch productBarcode { case .upc(let numberSystem, let manufacturer, let product, let check): print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).") case .qrCode(let productC..
[swift] ARC(Automatic Reference Counting) [swift 기초문법] - Automatic Reference Counting, ARC ARC란 ARC는 자동 레퍼런스 카운팅으로서 프로퍼티, 상수, 변수에 참조가 지정되면 그때 ARC에 들어있는 카운트를 증가시키고 프로퍼티, 상수, 변수가 해제되면 카운트를 감소시킨다. 보유한 카운트가 0이 되면 메모리를 해제시킨다. Swift는 앱의 메모리 사용을 관리하기 위해서 ARC를 이용해 자동으로 참조 횟수를 관리하여 개발자는 메모리 관리에 신경을 줄일 수 있고 ARC가 사용하지 않는 인스턴스를 메모리에서 해지한다. 최소 하나라도 인스턴스에 대한 참조가 있는 경우 메모리를 해제하지 않는다. Swift에서는 앱의 메모리 사용을 관리하기 위해 ARC(Automatic Reference Counting)을 사용한다...
[swift] Closure, Capture list [swift 기초문법] - 클로저 (Closure), 획득목록 (Capture list) 클로저란 이름 없는 함수로 봐도 무방합니다. in 으로 매개변수, 반환타입과 실제 클로저 의 코드를 분리한다는 점이 함수와 차이점입니다. 클래스처럼 참조타입입니다. 표현방식 { (parameters) -> (return type) in //statements } 함수전달과 클로저 전달방식 비교 let names:[String] = ["banana","apple","dark","iphone"] //함수 전달 예 func backwards(first: String, second: String) -> Bool { print("\(first) \(second) comparing...") return first > secon..
[swift] Mutating, Memberwise Initializers, Access Control [swift 기초문법] - mutating, Memberwise Initializers, 접근제어(Access Control) 구조체와 열거형같은 값타입(value type)은 속성값을 바꿀 수 없습니다. 이런 조건 하에 속성값을 바꾸고 싶으면 mutating이라는 키워드를 앞에 붙여서 메소드를 선언하면 속성값을 바꿀 수 있습니다. struct testStruct{ var total = 0 mutating func addValue(_ value: Int){ total+=value } } 프로퍼티의 이름으로 매개변수를 가지는 이니셜라이져로써 구조체는 사용자 정의 이니셜라이저를 구현하지 않으면 멤버와이즈 이니셜라이져를 자동으로 제공합니다. 클래스는 지원하지 않습니다. 코드의 중..
[swift] Property [swift 기초문법] - 프로퍼티 (Property) 저장 프로퍼티 (Stored Property) 인스턴스의 변수 또는 상수를 의미한다. 클래스 또는 구조체의 인스턴스와 연관된 값을 저장한다. 옵셔널이 아니면 클래스에서는 기본값을 셋팅하거나 이니셜라이져로 초기화를 해줘야 한다. 지연 저장 프로퍼티 (Lazy Stored Property) lazy 키워드를 사용하여 var 로 정의한다. 호출이 있어야 값을 초기화한다. 불필요한 성능 저하나 공간 낭비를 줄일 수 있다. struct Point{ var x: Int = 0 var y: Int = 0 } class Position{ lazy var point: Point = Point() } let yagomPosition: Position = Positio..