Swift12 Array의 index를 안전하게 처리하는 방법 Sequence Protoocol을 따는 Collection Protocol은 Indexing에 관한 프로토콜입니다. Dictionary 또한 Collection protocol을 따르고 있습니다. 그렇기 때문에 Array에서 잘못 인덱스를 접근하는 것을 방지하기 위해서는 Collection Protocol로 접근하는 것이 좋습니다. extension Collection { subscript(safe index: Index) -> Element? { if self.indices.contains(index) { return self[index] } return nil } } indices라는 Collection프로토콜의 속성은 해당 컬렉션의 모든 인덱스를 Collection으로 반환합니다. 해당 index.. 2023. 4. 18. KeyPath 오늘은 KeyPath라는 것을 알아보겠습니다. KeyPath는 사실 개발하면서 현재 많이 쓰지 않는 기능이긴 하지만 SwiftUI에서 간혹 보곤 합니다. LazyVGrid(columns: columns) { ForEach(images, id: \.self) { image in Image(uiImage: image) .resizable() .scaledToFit() .frame(height: 150) } } \.self 이게 바로 KeyPath입니다. 사용해 보신 적이 있으실 겁니다. 간단한 구조체 하나를 만들면서 설명 시작하겠습니다. struct Streamer { var name: String var subscriber: Int } let streamer = Streamer(name: "nogu", s.. 2023. 1. 16. FP에서 Setter 사용법 이번에는 데이터에 값을 세팅하는 방법은 FP적으로 생각해보도록 하겠습니다. 간단한 튜플 하나를 만들었습니다. let pair = (42, "Swift") 42를 43으로 증가시키고 싶다면 값에 접근하는 방법이 있을 수 있겠습니다. let IncresedPair = ((pair.0 + 1), pair.1) 그렇다면 좀 더 나아가 FP방법으로 생각해보면 어떨까요? 먼저 증가하는 함수가 있어야 할 것이고 증가한 값을 바탕으로 새로운 튜플을 반환해야 하는 함수가 있어야 할 것입니다. 증가하는 함수 |> 연산자 정의에서 본 간단한 함수입니다. func increase(value: Int) -> Int { // (Int) -> Int value + 1 } 이제 increase함수를 파리미터로 받고 튜플을 새로 반환.. 2022. 12. 10. Custom Operator => 이번 시간에는 https://devamor.tistory.com/6에서 배운 연산자 만들기를 통해서 새로운 연산자를 만들도록 하겠습니다. 아래의 코드를 보면서 설명드릴게요! func increaseTwo(value: Int) -> Int { // 인수를 받아서 2을 더해서 반환하는 함수 return value + 2 } func decreaseOne(value: Int) -> Int { // 인수를 받아서 1을 빼서 반환하는 함수 return value - 1 } 사용할 때! decreaseOne(value: increaseTwo(value: 5)) // print 6 ((Int) -> Int) -> Int increaseTwo함수의 반환 값을 decreaseOne 함수에 넣어서 결괏값을 출력합니다. 매.. 2022. 12. 2. 이전 1 2 3 다음