swift

· iOS/Swift
basicText는 아래와 같이 modifier들을 사용가능.struct SwiftUIView: View {    var body: some View {        Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tempus sem at congue varius. Nunc vulputate purus eros, vitae venenatis turpis blandit in.")            .bold()     // 볼드체            .italic()   // 이텔릭            .strikethrough(true, color: .blue)  // 취소선            .underline(true,..
· iOS/Swift
SwiftUI의 뷰 계층에서 UIKit을 사용하기 위한 방법으로 UIViewRepresentable, UIViewControllerRepresentable 을 제공. (https://swifty-cody.tistory.com/44) 반대로 UIKit 뷰 계층에서 SwiftUI를 사용하기 위한 방법으로 UIHostingViewController를 제공함. https://developer.apple.com/documentation/swiftui/uihostingcontroller UIHostingController | Apple Developer DocumentationA UIKit view controller that manages a SwiftUI view hierarchy.developer.apple...
· Dev Terms
Clean Architecture여러가지 아키텍처들이 있지만 이들의 공통적인 목표가 있음.프레임워크에 독립적일 것.Testability. 비즈니스 규칙은 UI, DB, 웹 서버 또는 기타 외부요소 없이 테스트 가능.UI와 독립적. 시스템의 나머지 부분을 변경하지 않고도, UI를 쉽게 변경할 수 있음.(예를 들어, 비즈니스 규칙을 변경하지 않도고 웹 UI를 콘솔 UI로 교체 가능)DB와 독립적. 비즈니스 규칙 DB에 바인딩되지 않음.외부 기관으로부터 독립적. 실제 비즈니스 규칙은 외부 세계에 대해 전혀 알지 못함. 아래의 다이어그램은 이러한 모든 아키텍처들을 하나의 실행가능한 아이디어로 통합하기 위한 시도.  Dependency Rule동심원의 바깥에서 안쪽으로 들어갈수록 고수준.바깥쪽 원은 매커니즘, 내..
· iOS/Swift
유니코드와 UTF전 세계 모든 문자를 전산에서 일관된 표현으로 다룰 수 있도록 설계된 산업표준. 유니코드를 실제로 저장하는 방식은 UTF. 유니코드 스칼라크기가 가변적인 String 문자열을 하나하나 개별적으로 접근하기 위한 방법. Unicode기반 21-bit 코드. UTF-32랑 거의 동일. 하나 이상의 Unicode Scalar가 모여 Character를 이룸.let code = 0xAC00 let scalar = UnicodeScalar(code)! let string = "\(scalar)" // 가 let 가 = "\u{AC00}" // 가 한글 유니코드주로 쓰이는 한글 유니코드초성 19개 1100(4352) ~ 1112(4370) 중성 21개 1161(4449) ~ 1175(4469) 종성 ..
· iOS/Swift
localizedStandardCompare(_:)localizedStandardCompare(_:) documentFinder의 파일 정렬처럼 String을 비교해주는 메서드. 예시아래는 기존 sorted() 메서드의 예시.let fileNames = [ "파일이름 100.txt", "파일이름 5.txt", "파일이름 20.txt"]let sortedFileName = fileNames.sorted()sortedFileName .forEach { print($0) } 결과파일이름 (100).txt파일이름 (20).txt파일이름 (5).txt  하지만 우리가 파일 정렬에서 원하는 건 파일명 뒤의 숫자가 텍스트 순서가 아닌 Integer의 순서로 정렬이 되는 것을 원..
· iOS/Swift
(WWDC22) Hello Swift Charts(WWDC22)Swift Charts: Raise the bar Swift Charts FrameworkApple이 디자인한 Chart를 만들기 위한 Framework.SwiftUI와 동일한 선언적 문법.  Mark차트에서 각 항목에 대한 요소를 Mark라고 함.위 그림에서 Mark는 Bar Mark.import Chartsimport SwiftUIstruct StylesDetailsChart: View { var body: some View { Chart { BarMark( x: .value("Name", "Cachapa"), y: .value("Sales", 90..
· iOS/Swift
WWDC의 Demystify SwiftUI를 정리한 내용입니다.SwiftUI는 선언적UI로서 고수준의 앱이 원하는 것을 Describe하면 SwiftUI가 이를 구현하는 방법을 정확히 결정.대부분의 경우 잘 작동하지만, 예상하지 못한 동작을 하는 순간은 생겨나는데,이런 순간에 원하는 결과를 얻기 위해 SwiftUI가 뒤에서 무엇을 하는지 이해하는 것이 도움이 됨. SwiftUI가 코드를 볼때 무엇을 보는가Identity: SwiftUI가 앱의 여러 업데이트에서 element를 동일하거나 별개로 인식하는 방법Lifetime: SwiftUI가 시간이 지남에 따라 View와 데이터의 존재를 추적하는 방법의존성: SwiftUI가 인터페이스를 업데이트해야하는 시기와 이유를 이해하는 방법위 세가지 개념이 Swift..
· iOS/Combine
시퀀스 연산자들은 Publisher자체가 시퀀스라고 보면됨. 시퀀스 연산자들은 개별 방출값이 아닌 Publisher 전체를 다룸. 값 찾기 min() Publisher가 Finish될 때까지 기다렸다가, 최소값만 방출시켜줌. Comparable 프로토콜을 따르는 경우 별도의 파라미터없이 최소값을 찾아줌. var subscriptions = Set() // 1. 숫자를 방출하는 Publisher let publisher = [1, -50, 246, 0].publisher // 2. min 연산자로 최소값을 찾아서 print publisher .print("publisher") .min() .sink(receiveValue: { print("최소값은 \($0)") }) .store(in: &subscript..
· iOS/Combine
반응형 프로그래밍의 핵심 아이디어는 시간에 따른 비동기 이벤트 흐름을 모델링하는 것. Combine에서는 시퀀스가 시간에 따라 값에 반응하고 변환하는 다양한 연산자들을 제공. Time shifting delay(for:tolerance:scheduler:options) (Rx의 delay) Upstream Publisher가 값을 내보낼 때마다 delay 연산자는 잠시 동안 값을 유지한 다음 사용자가 지정한 스케줄러에서 요청한 지연 시간 후에 값을 내보냄. 초마다 하나의 값을 내보내는 퍼블리셔를 만든 다음 1.5초씩 지연시키고 두 타임라인을 동시에 표시하여 비교. import Combine import SwiftUI import PlaygroundSupport var subscriptions = Set(..
· iOS/Swift
https://developer.apple.com/documentation/swift/collection/count-4l4qk Collection의 Element를 세어주는 count의 복잡도는 기본적으로 O(n) 연산. RandomAccessCollection을 준수하는 경우 O(1) 연산. Collection이 비어있는지 여부를 체크할 때는 Collection.count == 0 으로 체크하는 것보다, Collection.isEmpty 로 체크하는 것이 더 좋음. if someArray.count == 0 { // ❌ ... } if someArray.isEmpty { // ⭕️ ... }
· iOS/Swift
Generic 모델링에서 시작합니다. 아래와 같은 Animal 프로토콜이 있을 때, 이를 사용하는 Farm struct의 메서드에서 Animal의 Concrete 타입으로 대체될 타입파라미터적합성을 따르도록 적용할 수 있습니다. protocol Animal { associatedtype Feed: AnimalFeed func eat(_ food: Feed) } struct Farm { func feed(_ animal: A) { // ... } } 혹은 아래처럼 후행 where절에서 프로토콜 적합성을 지정할 수 있습니다. where절은 디테일하게 requirement와 타입 관계를 작성할 수 있게 해줍니다. struct Farm { func feed(_ animal: A) where A: Animal {..
· iOS/Swift
프로토콜 extension 프로토콜 자체를 확장하여 프로토콜 member의 기본 구현을 제공할 수 있습니다. extension Localizable { static var supportedLanguages: [Language] { return [.english] } } 여기서는 supportedLanguages의 기본 구현으로 Localizable을 확장합니다. Localizable을 준수하는 각 타입은 이제 해당 구현에 액세스할 수 있으므로 자체 정의할 필요가 없습니다. struct Image: Localizable { // no need to add `supportedLanguages` here } 위까지는 코드의 모든 유형이 구현할 수 있는 프로토콜로 작업했습니다. 특정 class에 의해서만 준수되..
· iOS/iOS Dev
Public-Key Cryptography 이전 글에서 정리했던 HMAC, Sealed Box암호화는 Sender와 Receiver모두 키를 알고 있는 대칭키를 사용합니다. 대칭키는 대역 외(Out of band)로 전송되어야 하고, 이 작업을 안전하게 수행할 수 없는 경우 공개키 암호화(public-key cryptography)를 사용합니다. 실제로 인터넷에서 일상적으로 사용하는 대부분의 암호화는 공개키 암호화를 사용하고, Xcode가 앱에 서명을 할 때에도 동일합니다. 공개키 암호화는 수학적으로 연결된 두개의 키를 생성합니다. 개인키는 비밀로 유지하고 해당 공개키 Data를 게시합니다. 개인키로 Data 혹은 Data Digest에 서명한 다음 전송합니다. Receiver는 공개키 Data에서 공개..
· iOS/iOS Dev
Hasher와 Cryptographic Hashing Hashable 프로토콜 타입의 객체를 Hasher로 hashing하면 무작위로 생성된 시드를 사용해서 해시값을 생성하여 실행될 때마다 다른 해시값을 생성시켜줍니다. func hashItem(item: String) -> Int { var hasher = Hasher() item.hash(into: &hasher) return hasher.finalize() } // Hashing data let hashValue = hashItem(item: "Hasher로 hash한 Data") // 실행시 마다 다른 해시값 Cryptographic Hashing은 Hasher와 같이 거의 유일한 해시값을 생성하고, 입력값을 조금만 변경해도 해시값이 크게 변합니다..
· iOS/iOS Dev
SSL Pinning(이하 Pinning, 피닝)은? 호스트를 인증서 또는 공개키와 연결하는 프로세스입니다. 호스트의 인증서 또는 공개키를 알고 있으면 해당 호스트에 고정(Pinning)합니다. 즉, 미리 정의된 인증서 또는 공개키 중 하나 또는 몇 개를 제외한 모든 인증서를 거부하도록 앱을 구성합니다. 앱이 서버에 연결할 때마다 서버 인증서를 고정된 인증서 또는 공개키와 비교합니다. 둘이 일치하는 경우에만 앱이 서버를 신뢰하고 연결을 설정합니다. 일반적으로 개발 시 서비스의 인증서 또는 공개키를 추가합니다. 즉, 모바일 앱은 앱 번들 내에 디지털 인증서 또는 공개키를 포함해야 합니다. 공격자가 핀을 오염시킬 수 없기 때문에 이 방법이 선호됩니다. SSL 인증서 Pinning이 필요한 이유? 일반적으로 ..
SwiftyCody
'swift' 태그의 글 목록