swift & iOS/swift 49

[swift] ObservableObject 프로토콜과 swiftUI 뷰

출처: https://www.hackingwithswift.com/books/ios-swiftui/sharing-an-observed-object-with-a-new-view Classes that conform to ObservableObject can be used in more than one SwiftUI view, and all of those views will be updated when the published properties of the class change. ObservableObject 프로토콜을 준수하는 클래스라면 여러 개의 SwfitUI 뷰에서 사용할 수 있다. 그리고 그 클래스의 프로퍼티(@Published가 붙은 프로퍼티)에 변동 사항이 있을 때, 이 클래스를 지켜보고 있..

swift & iOS/swift 2022.03.24

[swift] 프로퍼티를 관찰하기 위한 property observer (didSet, willSet)

property observer는 단어 그대로 '프로퍼티 관찰자'이다. 왜 관찰할까? 관찰하고 있던 property에 변동이 생겼을 때 필요한 작업을 하기 위함이다. didSet은 '관찰하고 있던 프로퍼티에 값이 셋팅 되었으니 무언가를 하자!' 이고 willSet은 '관찰하고 있던 프로퍼티에 값이 셋팅 되려고 하니 무언가를 하자!' 이다. did과 will이라는 단어 그대로다. 프로퍼티에 값이 '셋팅된 후'에 무언가를 하느냐와 값이 '셋팅 되려고 할 때' 무언가를 하느냐다. 그러면 '무엇'을 하면 좋을까? 아래는 스위프트 공식 문서의 Properties 챕터 중 property observer에 관한 샘플 코드다. // 출처: https://docs.swift.org/swift-book/LanguageG..

swift & iOS/swift 2022.03.24

[swift] 시간, 날짜 출력하기 ( .dateTime, Date.now.formatted(...) )

프로그래밍에서 어떤 언어를 사용하던 시간, 날짜 다루는 것은 정말 까다롭다. Swift도 마찬가지인데, 자바스크립트 였으면 moment 같은 라이브러리를 사용했을 법한 것들을 iOS가 어느 정도 처리해주는 것 같다. Text(Date.now, format: .dateTime.day().month().year()) // 2022년 3월 15일 Text(Date.now, format: .dateTime.hour().minute()) // 오전 11:48 Text(Date.now.formatted(date: .long, time: .shortened)) // 2022년 3월 15일 오전 11:48 Text(Date.now.formatted(date: .long, time: .omitted)) // 2022년 ..

swift & iOS/swift 2022.03.15

[swift] static 키워드: static이 붙은 프로퍼티와 메소드

아래 swift 공식 문서들을 읽고 정리한 내용임. https://docs.swift.org/swift-book/LanguageGuide/Properties.html#ID264 Properties — The Swift Programming Language (Swift 5.6) Properties Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value. Computed..

swift & iOS/swift 2022.02.14

[swift] 기존 데이터 타입에 추가 기능 작성하기: extension

지하철이나 버스 노선을 필요에 따라 연장하거나 노선을 추가 개통하는 것처럼 스위프트에서도 기존 데이터 타입에 필요에 따라 새로운 기능을 추가하게 해주는 도구인 extension이 있다. 기존의 클래스, 구조체, 열거형, 프로토콜 및 기타 데이터 타입에 기능을 작성할 수 있다. extension은 아래처럼 사용한다. 또한 extension이 프로토콜을 채택할 수도 있다. extension이 프로토콜을 채택할 수 있다는 특징을 이용하여 viewController가 여러 개의 프로토콜을 채택하고 컨트롤러 내부 소스가 마구 복잡해질 때 extension을 만들고 컨트롤러 대신 이 extension이 필요한 프로토콜을 하나씩 채택한 후, 해당 extension 내부에서 채택한 프로토콜을 준수하는 방법으로 컨트롤러..

swift & iOS/swift 2022.02.08

[swift] 딕셔너리의 key, value를 배열로 만들기

딕셔너리에 for...in 으로 접근할 때 딕셔너리의 keys나 values 프로퍼티를 이용하면 딕셔너리의 key만 또는 value만 가지고 for ... in 을 사용할 수 있다고 했는데 https://what-whale-wants-to-say-is.tistory.com/105 [swift] 딕셔너리에 for...in 으로 접근하기 for...in 을 사용하여 딕셔너리의 항목에 접근할 수도 있다. var myDict = ["one":1, "two":2] for d in myDict { print(d) } /* (key: "two", value: 2) (key: "one", value: 1) */ 딕셔너리에는 순서가 없기 때.. what-whale-wants-to-say-is.tistory.com 사실 ..

swift & iOS/swift 2022.02.07

[swift] 딕셔너리에 for...in 으로 접근하기

for...in 을 사용하여 딕셔너리의 항목에 접근할 수도 있다. var myDict = ["one":1, "two":2] for d in myDict { print(d) } /* (key: "two", value: 2) (key: "one", value: 1) */ 딕셔너리에는 순서가 없기 때문에 매번 print 할 때마다 다르게 출력된다. 아무튼 위처럼 항목에 통채로 접근하는 것보다는 아래처럼 튜플을 사용하여 key와 value에 각각 접근하는 방법이 더 유용하다고 생각한다. for (k, v) in myDict { print("key: \(k), value: \(v)") } /* key: two, value: 2 key: one, value: 1 */ 이것 말고도 딕셔너리의 keys, values ..

swift & iOS/swift 2022.02.07