swift 7

[iOS] SwiftUI : View update에 대한 고찰

BackgroundSwiftUI는 선언형 기반으로 구현하도록 설계되어 있다. 이 선언형의 관점을 이해하기 위해서는 함수형 프로그래밍에 대한 깊이있는 이해가 필요하다. Immutable type을 왜 쓰는지, Value type을 왜 사용하는지, 순수함수를 왜 쓰고 어떻게 비지니스 로직을 구현해야 하는지 등이다. 그리고 SwiftUI의 동작 체계에 대한 이해도 필요하다. View의 업데이트는 어떻게 이루어지는지, 이에 대한 최적화 작업은 어떻게 해야 하는지 등이다. SwiftUI를 가볍게만 사용하던지라 이에 대한 이해가 부족했고, 그러기에 이에 대해서 정리하려고 합니다. SwiftUI가 iOS 13부터 지원했지만, 최근까지 버그도 많고 아직 기술 자체가 덜 성숙했던지라 어떤 변화가 생겼는지 정도만 관심을 ..

[iOS] Swift Concurrency Foundation

async-await 비동기 함수 혹은 메소드 (이하 '비동기 함수')는 다른 비동기 방법 (GCD, Operation 등)과 몇가지 다른 차이점을 보인다. return 및 thorows 등을 일반적인 함수들과 같이 지원한다. 이는 유연하고 확장 가능한 비동기 실행 방법을 제공한다. 그리고 실행 흐름을 busy wait 하지도 않고 suspend 상태로 남겨두었다가 마저 실행된다. suspend 상태로 남겨두는 곳을 suspension point로 칭하기도 하는데, 이를 await라는 키워드를 통해서 표시한다. thread는 이 suspension point를 만나면 실행의 흐름을 넘기고 다른 코드를 즉시 실행하는 동작을 수행한다. async-let 'async let'을 사용하면 비동기 함수의 실행을..

[iOS] Initialization과 Literal

오늘은 초기화 메소드에 대한 포스팅이다. Objective-C로 개발을 하다보면 가장 많이 구현하는 부분이 초기화 메소드일 것이다. 일반적으로 아래와 같이 초기화 메소드를 사용하게 된다. -(instancetype)init{ self = [super init]; if (self) { //impelment here } return self;} 이중에서 우리가 얘기할 부분은 위에 하이라이팅된 부분이다. 굳이 메모리에 할당되어 있는 self 객체를 슈퍼클래스에서 초기화한 객체로 다시 assign하는 것일까? 주변 다른 개발자 분으로부터 그 해답을 얻었다. 우선 해답은 super class의 초기화 과정을 거치면서 할당된 메모리의 주소가 변경될 수 있기 때문이다. 메모리 주소가 초기화 과정에서 변경되는 이유는 ..

[Swift] Swift is now Open Source

애플에서 Swift를 오픈소스화 한다는 공약을 실천했다. 현재 레파지토리는 Github를 이용하고 있으며 담당 사이트로 Swift.org를 개설했다. 이슈 트래킹은 Jira를 이용한다. Mailing-list를 통하여 Swift의 변동사항과 개발 이슈/동향 등을 reporting 받거나 다른 개발자들과 소통 창구로 이용할 수 있다. 아래 Swift 관련 URL을 모아 놨다. 역시 애플에서 관리하는 프로젝트라서 Contribution section에 있는 가이드를 꼼꼼히 읽고 접근하는 것이 좋을 것 같다. Apple in Github : https://github.com/appleSwift Repository : https://github.com/apple/swift Swift.org : https://s..

[Swift] 알면 좋은 Array에서 제공하는 함수 (map, filter, reduce)

Mapmap은 각 element를 순회하면서 element를 수정할 때 사용하기 좋은 함수이다. 예를 들어 우리는 각 String에 "box"라는 String을 덧붙이기 위하여 for-in을 떠올리기 쉽다. ex) for string in strArray {string += "box"} 대신에 map 함수를 사용하면 한줄로 간단하게 작성할 수 있다. ex)var resultArray = strArray.map({$0+"box"}) 참고로 map의 param 함수 타입은 '(T) -> U'이다. map 함수는 Array의 각 element를 순회하면서 개발자가 정의한 동작을 수행하게 된다. Filterfilter는 말 그대로 특정 조건을 통과한 element들을 모아서 Array로 반환하는 함수 이다. f..

[Swift] Swift Study 2주차 요약 (Closure, Collection, Property, Initialization, Observer ... etc)

Function parameters함수의 param들은 기본적으로 다 상수다. 그러므로 수정이 불가능하다. 함수 내에서 param을 수정하기 위해선 inout param으로 선언하면 되는데, 함수 선언부에서 param앞에 '&'를 표시해주면 된다. Function typefunction type을 다른 function의 param의 타입으로 사용할 수 있다. 함수의 타입이 들어가는 부분에 '(Int, Int) -> Int'와 같이 일반 함수 선언 부에서 함수명의 뒷부분을 적어주면 된다. function type을 사용해서 함수를 param으로 사용할 수 있다. ex)func addTwoInts(a: Int, b: Int) -> Int { return a + b} func printMathResult(ma..

[Swift] Swift Study 1주차 요약 (Alias, Tuple, Optional, Range operator ... etc)

Swift에 입문하기에 앞서 Swift의 전반적인 syntax에 먼저 익숙해지자. /*************************************************************************/ Type alias기존의 타입들을 대체하는 키워드를 정의할 수 있다. 팀내에서 정의된 타입을 사용할 때는 편리할 수 있으나 무분별한 type alias의 사용은 code의 readability를 저해할 것 같다. ex)typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min// maxAmplitudeFound is now 0’ Tuple다수의 value들을 하나의 compound value로 사용할 수 있도록 해준다. e..