전체 글
-
Swift 상속Programming/Swift(iOS) 2021. 4. 3. 00:00
일반적인 상속은 다른 곳에서 많이 다루니, 여기서는 상속에서 좀 특이한것들 다뤄볼까 합니다. static 메서드, 프로퍼티는 상속 가능할까? class Car { static func foo() { print("Car foo") } } class Truck:Car { override static func foo() { print("Truck foo") } } 위와 같이 쓰게 되면 "Cannot override static method" 를 발생 시킵니다. static method는 상속이 불가능하다는 메세지입니다. 이 문제를 해결하기 위해서는 "class" keyword를 사용하면 됩니다. class Car { class func foo() { print("Car foo") } } class Truck:..
-
Swift 초기화 메서드Programming/Swift(iOS) 2021. 4. 2. 21:58
1. Struct 초기화 - struct는 초기화 메서드가 가지고 있는 프로퍼티에 대해서 자동으로 생성됩니다. - 따라서 별도로 초기화 메서드를 만들 필요가 없지만, - 만약 사용자 초기화 메서드를 작성하는 순간, 시스템에서 제공하는 자동 초기화 메서드는 더 이상 사용할 수 없습니다. - 사용자 초기화 메서드와 시스템 초기화 메서드를 동시에 사용하도 싶다면, "extension"에 사용자 초기화 메서드를 구현하면 됩니다. //CaseIterable protocol을 만족하므로써 enum이 제공하는 모든 case를 얻어 올 수 있는 //allCases 메서드 사용가능 enum Color:CaseIterable { case red, blue, white, crayon } struct Car { let nam..
-
Swift Optional - 2Programming/Swift(iOS) 2021. 4. 2. 21:34
이번시간에는 Optional을 활용하는 예제를 해보겠습니다. 고객 등급을 나타내는 Membership enum이 있습니다. struct User는 Membership을 Optional변수로 가지고 있습니다. -> Membership이 있을 수도 있고, 없을 수도 있습니다. 첫 객체는 .gold 정보가 있는 User이며, 두번째 객체는 nil을 가집니다. 이때 if let으로 정보를 가져오고, switch~case를 통해서 값을 출력해보면 현재 정보를 알 수 있습니다. //멤버십 레벨을 나타내주는 enum enum Membership { case gold case silver } //User는 멤버십을 가지고 있고, 이 멤버십은 있을수도 있고, 없을 수도 있습니다. struct User { let memb..
-
Swift Optional - 1Programming/Swift(iOS) 2021. 4. 2. 08:19
swift에서 Optional은 '값이 있을 수도 있고 없을 수도 있다.' 입니다. Optional은 nil을 안전하게 다루는 방법이라고 할 수 있습니다. 간단한 String optional입니다. var str1:String? = nil var str2:Optional = "" print(str1) print(str2) print(str1?.isEmpty) print(str2?.isEmpty) /* 결과 nil Optional("") nil Optional(true) */ 코드에서도 보듯이 optional의 nil과 isEmply와는 다릅니다. str1과 str2의 isEmpty의 결과를 잘 보세요. nil과 true가 나옵니다. 즉 optional에 nil이면 아예 값을 할당 조차 안했다는 얘기가 됩..
-
Swift Property - 3Programming/Swift(iOS) 2021. 4. 1. 23:42
프로퍼티에는 감시자라는게 있습니다. 값이 변경될 때, 특정 행동들을 수행하도록 만들 수 있습니다. 저장 프로퍼티에 한해서만 사용을 할 수 있고, willSet / didSet이 있습니다. - willSet 값이 변경되지 직전에 호출 속성이 변경될 것이라는 것을 외부에 알릴때 많이 사용 -didSet 값 변경 후에 호출 된다. 값의 변경 이후에 추가적으로 수행해야되는 작업이 있을 경우 이와는 별도로 defer block도 있습니다. 함수가 끝나고 난 이후에 무조건 실행되는 block입니다... struct User { var email:String { didSet { //만약 emil의 주소가 올바른지 체크하고 싶다.. //예를 들어 이메일의 입력이 ". hello@gmail.com "이다.. //공백 제..
-
Swift Property - 2Programming/Swift(iOS) 2021. 4. 1. 23:11
그렇다면 프로퍼티에서 적합하지 않은건 무엇일까요? 오래 걸리는 계산등은 프로퍼티에서 적합하지 않습니다. 이미지를 다운받고 , 그리는 코드가 있다고 해봅시다. 이때, 2번 연속 draw()를 호출하게 되면 ...image를 접근할 때마다 다운로드를 받아야합니다. struct UIImage { let url:String } struct Image { let url:String //계산형 프로퍼티는 시간이 오래걸리는 작업에 적합하지 않다. var image:UIImage { print("Donwload image from \(url)") sleep(1) return UIImage(url:url) } //draw를 할때마다 다운로드 받는다...lazy를 이용해서 처음 접근할때만 초기화하고, func draw()..
-
Swift Property - 1Programming/Swift(iOS) 2021. 4. 1. 22:57
프로퍼티는 접근자의 메소드를 자동으로 생성하는 기술이라고 볼 수 있습니다. 예를 들면, positionX의 값을 구하는데 있어서 x의 좌표가 필요하다고 합니다. 그렇다면 아래와 같이 get블럭 안에서 계산된 값을 전달 받을 수 있습니다. 이를 계산 프로퍼티 혹은 연산 프로퍼티라고 합니다. let x:Int = 10 let positonX:Int { get { return x + 10 } } 단순히 var로 된 변수를 선언하는 것은 저장 프로퍼티라고 합니다. swift에서는 상수, 변수냐에 따라서 get, set을 사용하는 범위가 달라집니다. let -> get var -> get, set let은 한번 정해지면 변할 수 없는 값이기 때문에 set을 할 수가 없습니다. 또하느 계산프로퍼티는 어떻게 보면 프..
-
Swift Enum - 4Programming/Swift(iOS) 2021. 4. 1. 22:33
이번에는 enum rawValue를 이용해보겠습니다. 아래 코드의 문제는 뭘까요? switch의 case에 문자열로 구분하므로, 실패(default)에 대한 구현을 항상해야됩니다. 반환값이 String Optional이므로 호출부에서 if let ~으로 한번 더 처리해야된다. 대문자를 따로 해줘야 한다. func getAvatarImageFileName(for fileExtension:String) -> String? { switch fileExtension.lowercased() { //문자열에 대한 switch ~ case 처리는 현재 case 이외의 값도 올 수 있으므로 default를 추가해야된다 case "jpg", "jpeg": return "avatar.jpg" case "bmp": retu..