본문 바로가기

SWIFT15

[SwiftUI] List 팁 List 간격 조정 Spacing between items of List in SwiftUI 리스트 아이템들의 간격을 조정하기 위해서 아이템뷰의 자체 생김새를 간격을 보이도록 작성하는 것도 방법이겠으나, 공식적인 함수 listRowInsets을 사용해서 간격을 조정하는 것이 뷰 관리에 좋다. listRowInsets은 ForEach안에서만 동작하는 점이 아쉽다. (Xcode 11.5, swiftUI 1.0) List { ForEach(feedItems, id: \.id) { item in FeedItemView(model: item) .listRowInsets(EdgeInsets(top: 20, leading: 20, bottom: 20, trailing: 20)) } }List 구분선 제거 Removi.. 2020. 7. 15.
[Swift] 숫자의 문자 변형 정수 자리수 고정시키기 String(format: "%03d", 10) // 010 String(format: "%05d", 10) // 00010 String(format: "%03d", 1234) // 1234 String(format: "%03d", 123456) // 123456소수점 자리수 고정시키기 String(format: "%.2f", 3.14159) // 3.14 String(format: "%.4f", 3.14159) // 3.1416 (반올림) String(format: "%.6f", 3.14159) // 3.14159016진수 문자로 변환 String(format: "%2X", 123456) // 1E240 String(format: "%2x", 123456) // 1e240 (소문자) 2020. 7. 9.
[iOS] 유용하지만 잘 모르는 Foundation Class 본 글 요약 : Useful obscure Foundation types in Swift NSScanner NSScanner를 사용하면 문자열에서 숫자 또는 문자들을 순서대로 찾아낼 수 있다. public func extractIntsFrom(string: String) -> [Int] { var result: [Int] = [] let scanner = Scanner(string: string) // 숫자가 아닌 것은 전부 건너뜀 scanner.charactersToBeSkipped = CharacterSet.decimalDigits.inverted var pointer: Int = 0 while scanner.isAtEnd == false { if scanner.scanInt(&pointer) { r.. 2019. 7. 4.
[Swift] Xcode 콘솔 로그 변경하기 Changing log style in Xcode console Xcode 콘솔에서도 안드로이드 Logcat 처럼 print 값이 호출되는 위치와 코드라인 등을 표시할 수 있더라구요. 이제야 알게 되다니.. Literal Expression 문서에 잘 나와 있다. #file 은 파일 정보를 파라메터로 받을 수 있다. #line 은 코드 라인 정보를 받는다. #function은 함수 이름을 받는다. 아래 Log 함수를 전역에 만들고, public func Log(_ object: T?, filename: String = #file, line: Int = #line, funcName: String = #function) { #if DEBUG let th = Thread.current.isMainThread .. 2019. 4. 2.
[iOS] UICollectionView와 UITableView의 배치 업데이트 UICollectionView 와 UITableView 에서 데이터 변경사항을 반영할 때, 이런 함수들로 애니메이션 효과를 줄 수 있잖아요. func deleteItems(at: [IndexPath]) func moveSection(Int, toSection: Int) func moveItem(at: IndexPath, to: IndexPath) func insertItems(at: [IndexPath]) func insertSections(IndexSet) func deleteSections(IndexSet) 애니메이션을 통해 이런 효과를 얻게 되죠. 이런 작업은 2 개의 데이터 셋을 비교해서 변경사항을 블럭으로 묶어 performBatchUpdates 함수를 사용하게 됩니다. 이때 2 개의 데이터를 .. 2019. 3. 21.
[Swift] 문자열에서 공백 또는 줄내림 없애기 trimmingCharacters 를 사용한다. 파라메터에서 미리 지정된 .whitespacesAndNewlines 를 이용한다. let text = " hahaha hohoho. " let trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines) 2019. 3. 18.
[ReSwift] Reducer를 하나로 묶는 팁 Combine reducers that act on identical types 하나의 액션에 여러가지 리듀서들을 반응시키는 코드 팁 https://github.com/ReSwift/ReSwift/issues/340 func combineReducers(_ first: @escaping Reducer, _ remainder: Reducer...) -> Reducer { return { action, state in let firstResult = first(action, state) let result = remainder.reduce(firstResult) { result, reducer in return reducer(action, result) } return result } } // Usage: .. 2018. 4. 30.
ReSwift 미들웨어의 리듀서 처리 Tip Middleware occurs around reducers ReSwift 미들웨어 하나에서 상태변경 전후를 파악하는데 좋은 팁 하나 (issues-1) public func persistanceMiddleware() -> Middleware { return { dispatch, getState in return { next in return { action in // Any code here is before the reducers next(action) // This executes the reducers // Any code here is after the reducers } } } } 2018. 2. 23.
ReSwift - Subscribing to multiple states ReSwift 이슈 스레드에서 발견함 (issues 318) * 하나의 클래스에서 다양한 스테이트를 구독하는 방법 : ReRxSwift 를 사용하거나 아래와 같이 헬퍼 클래스를 활용할 수 있겠다. public class BlockSubscriber: StoreSubscriber { public typealias StoreSubscriberStateType = S private let block: (S) -> Void public init(block: @escaping (S) -> Void) { self.block = block } public func newState(state: S) { self.block(state) } } 아래처럼 활용.. class Sample { private lazy var s.. 2018. 1. 13.
스위프트 타입 체크 Check if instance is struct or class 클래스인지 구조체인지 확인 class TClass {} struct TStruct {} func who(_ any: Any) -> String { if Mirror(reflecting: any).displayStyle == .class { return "Class" } else { return "Struct" } } print(who("Hello")) // Struct print(who(TClass())) // Class print(who(TStruct())) // Struct print(who(1)) // Struct Check if generic type is which class 제네릭 타입이 특정 클래스 인지 확인 protocol .. 2018. 1. 10.
ReSwift middleware로 비동기 처리 예시 ReSwift middleware 를 이용한 비동기 처리 예시 AsyncReSwift.swift 2017. 11. 13.
옵셔널 클로저는 escaping 이 기본이구나.. 클로저를 옵셔널이면 escaping 이 기본이다. from @escaping failing on optional blocks That is unfortunately the case for Swift 3. Here are the semantics for escaping in Swift 3:1) Closures in function parameter position are non-escaping by default2) All other closures are escapingThus, all generic type argument closures, such as Array and Optional, are escaping. This puts us in the very unfortunate situation wh.. 2017. 10. 13.