iOS/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...
· 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
TCA가 앱 개발에서 해결하고자 하는 것상태(State) 관리: 간단한 값 타입들로 어플리케이션의 상태를 관리하는 방법, 상태를 공유를 통해 화면에서 일어나는 변화(Mutation)를 다른 화면에서 즉시 관측(Observe)하는 방법을 제공.합성(Composition): 기능을 여러 개의 독립된 모듈로 추출하는 방법, 이 모듈을 다시 합쳐서 거대한 기능을 작은 컴포넌트의 집합으로 구성하는 방법을 제공.사이드 이펙트(Side Effects): 어플리케이션 바깥세상과 접촉하는 작업을 테스트할 수 있고 이해하기 쉽게 작성하는 방법을 제공.테스팅(Testing): 아키텍처 내부의 기능을 테스트하는 방법뿐만 아니라 여러 파트로 구성된 기능의 통합 테스트를 작성하는 방법, 사이드 이펙트가 어플리케이션에 끼치는 영향..
· iOS/Swift
WWDC의 Demystify SwiftUI를 정리한 내용입니다.SwiftUI는 선언적UI로서 고수준의 앱이 원하는 것을 Describe하면 SwiftUI가 이를 구현하는 방법을 정확히 결정.대부분의 경우 잘 작동하지만, 예상하지 못한 동작을 하는 순간은 생겨나는데,이런 순간에 원하는 결과를 얻기 위해 SwiftUI가 뒤에서 무엇을 하는지 이해하는 것이 도움이 됨. SwiftUI가 코드를 볼때 무엇을 보는가Identity: SwiftUI가 앱의 여러 업데이트에서 element를 동일하거나 별개로 인식하는 방법Lifetime: SwiftUI가 시간이 지남에 따라 View와 데이터의 존재를 추적하는 방법의존성: SwiftUI가 인터페이스를 업데이트해야하는 시기와 이유를 이해하는 방법위 세가지 개념이 Swift..
· 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/Swift
https://developer.apple.com/videos/play/wwdc2022/110352/ Generic 모델링에 some/any를 적용하는 방법을 설명한 WWDC22 영상입니다. Farm을 시뮬레이션 하기 위한 예시. 추상화 도구들을 사용하기 전의 Concrete 타입의 예시부터 작성. Concrete 타입으로 먼저 모델링 Cow 구조체는 Hay(건초) 타입의 매개변수를 받는 eat()이라는 메서드가 존재하고, Hay 구조체는 Alfalfa 종류의 작물을 재배하기 위한 grow()라는 static 메서드가 존재. Alfalfa 구조체는 Alfalfa인스턴스에서 Hay를 수확할 수 있는 harvest() 메서드가 존재. Farm 구조체는 Cow에게 먹이를 줄 수 있는 feed() 메서드가 있음..
· iOS/Swift
Building ifelse 아래에서는 R이 사용하는 통계 프로그래밍 언어와 같은 ifelse() 문을 구현. // R ifelse(condition, valueTrue, valueFalse) Swift 삼항 연산자 condition ? valueTrue : valueFalse 과 동일한 작업을 수행. 플레이그라운드에 아래 코드를 작성. func ifelse(condition: Bool, valueTrue: Int, valueFalse: Int) -> Int { if condition { return valueTrue } else { return valueFalse } } let value = ifelse( condition: Bool.random(), valueTrue: 100, valueFalse: ..
· iOS/Swift
LLVM 프로젝트는 모듈식의 재사용 가능한 컴파일러와 툴체인의 집합. LLVM이라는 이름은 약자가 아니며 그것이 오픈소스 프로젝트의 풀 네임. (LLVM은 Swift 뿐만 아니라 Kotlin, Rust 등에서도 사용중) Swift 툴체인의 핵심은 Swift 컴파일러이며 소스 코드(.swift)를 실행 파일에 연결할 수 있는 object코드(.o)로 변환하는 역할을 함. LLVM 컴파일러 인프라에서 실행되는 데이터 흐름. Parse(구문 분석): Swift 소스 코드는 먼저 토큰으로 Parse되고 Abstract Syntax Tree(AST. 추상 구문 트리)에 입력됨. 이것은 각 표현식이 노드인 트리라고 생각할 수 있음. 노드는 또한 소스 위치 정보를 가지고 있어서 error가 감지되면 노드는 문제가 발..
· iOS/Swift
이번 WWDC23의 Expand on Macros 세션의 전반부 정리. (https://developer.apple.com/wwdc23/10167) Swift Macro는 컴파일러를 수정하지 않고 Swift 패키지에 배포할 수 있는 방식으로 boilerplate코드를 제거하고 Swift에 고유 언어기능을 추가 가능. 4가지 목적 1. Macro를 사용할 때 매우 명확해야 할 것. 2종류의 Macro. FreeStanding Macro: 코드에서 다른 항목을 대신함. #(pound)기호로 시작 Attached Macro: 코드 선언에서 attribute로 사용됨. @(at)기호로 시작 Swift는 이미 #과 @를 사용해서 특정 컴파일러 동작을 나타내고 있지만, Macro로 이를 확장할 수 있게 만듦. #이..
· iOS/Swift
What’s new in Swift - WWDC23 - Videos - Apple Developer Join us for an update on Swift. We'll show you how APIs are becoming more extensible and expressive with features like parameter packs... developer.apple.com if/else문의 향상 복잡한 조건을 기반으로한 let 변수를 초기화하려면 아래와 같은 복잡한 삼항 표현식이 나올수도 있습니다(있나!?). let bullet = isRoot && (count == 0 || !willExpand) ? "" : count == 0 ? "- " : maxDepth (R1, R2) func evalu..
SwiftyCody
'iOS/Swift' 카테고리의 글 목록