Swift에 대한 내용을 정리합니다.
Swift에 대한 내용을 정리합니다.
53 items under this folder.
개념 특정 작업이 전역적으로 단일 스레드에서 실행되도록 보장하는 장치 우리는 @MainActor라는 키워드만 추가하게 되면 main thread에서 동작한다는 것을 보장할 수 있다.
Global, Static 변수에 대해 사용시에 초기화 되는 방법 eager 앱 시작시 생성됨 장점 단순하다. data race 문제 없다. 단점 초기 로딩시 느리다. lazy 사용시에 초기화됨 장점 초기 로딩시 필요없는 것들을 로딩하지 않아 빠르다.
WWDC 24의 Swift 6 migration guide를 정리해본다.
Data-race의 문제를 swift concurrency (compiler constraint)를 통해 해결하지 않고, 타 매커니즘을 통해 해결한 경우, 이에 대해 에러를 내뿜지 않도록 하는 키워드 swift concurrency는 compiler가 data-race에 대한 취약점을 파악할 수 있다는 점에서 유용하다.
이게 뭐지?; special literal 이라고 함.
스위프트에서 제공하지 않는 Combination, Permutation 구현이다.
static 변수 및 함수는 인스턴스를 생성하지 않고 접근하기 위해 사용한다. swift에서는 어디서 관리하는 것이 좋을까? swift에서 사용하는 Method가 궁금하다면 해당글을 읽고 오자.
코드의 관리는 중요하다. 위계 질서를 가지고 구분하지 않으면 혼란을 초래한다. 접근 제어는 특히 SDK 작업을 하는 경우 인터페이스 역할을 하기 때문에 잘 알아두는 것이 좋다.
오래 기다렸다. ARC가 무엇일까? 자바의 Garbage Collector와는 무엇이 다를까? 장단점은 무엇일까? 어떤 원리로 동작하는 것일까? 발생하는 문제점은 무엇일까? 어떻게 해결할 수 있을까? 이러한 내 궁금증들을 담았다.
Swift는 객체의 느낌으로 사용하는 3개의 개체가 있다. struct, class, enumeration이 그것이다. struct는 apple에서 권장하고, 실제로도 대체하는 것이 좋다고 생각되는 자료구조이고, enum의 경우 다른 언어보다 기능이 많이 추가되었다.
Value Type 다른 변수에 대입하면 복사됨 argument로 넘겨도 복사됨 argument로 collection을 넘겨서 변화주면 원하는 결과를 얻을 수 없음 Objective-C의 경우 가능 Array 동일한 Type의 값을 저장할 수 있는 Ordered List 동일한 값이 다른 위치에서 반복적으로 낭로 수 있음 Foundation의 NSArray와 bridge 표현 let array: Array<SomeType>() let array: [SomeType] let array = [Int]() let array ...
dictionary에 value를 넣는데 nil인 경우는 빼고 싶다.
프로그래밍 언어에서 자주 사용하는 것들인 제어문, 문자열, 함수에 대해서 적어보려한다. 다른 언어와 많은 점이 다르지는 않기 때문에 한 포스팅에서 모두 알아보려 한다.
intance dealloc 되기 직전에 호출됨 deinit 키워드 사용 class에서만 사용 가능 통상적으로는 구현할 필요 없음 .
Enumeration 연관된 Value들의 공통 Type을 정의할 경우 사용 Type-Safe한 방법으로 사용 가능 특정 값으로 Raw Value 지정 필수 아님 Raw Value 사용 가능 자료 구조 String Chracter Integer Floating-point 사용 가능 기능 Computed Property Instance method Initializer Extension Protocol Raw Value의 묵시적 할당 enum Planet: Int { case mercury = 1, venus, earth, mars,...
에러 처리는 프로그래밍에서 빼놓을 수 없다. 에러 관리를 제대로 해두어야 추후 디버깅에 있어 이득을 볼 수 있다. 미래의 나를 위한 투자?의 개념이다. 에러를 관리하는 것도 중요하지만 에러를 내는 방법, 에러를 감지하여 처리하는 방법을 아는 것 역시 중요하다.
Extension과 Protocol은 Swift에서 자주 사용되는 기능이다. 값에 접근이 불가함에도 Extension으로 추가 기능을 구현할 수 있다.
일급 함수 parameter로 사용가능 return 값으로 사용가능 익명함수 argument label 호출하는 쪽에서 사용하는 이름 parameter name function 안에서 사용하는 이름 Variadic parameters 0개 이상의 특별한 타입을 나열해서 파라미터로 넘길 수 있음 ...을 넣어서 사용 이렇게 선언된 경우 함수안에서 해당 type의 Array로 사용할 수 있음 func sum(values: Int…) -> Int { var result = 0 for value in values { result +=...
Generic의 경우 코드 중복을 줄일 수 있는 좋은 기능이다. 잘 다뤄둔다면 중급(?) 이상의 개발자가 되는데 큰 도움을 줄 것이다.
Swift에서의 상속은 다른 언어와 비슷하다.
Swift에서 Struct, Class, Enum을 초기화할 수 있는 Initializer에 대해서 알아보자. 이 부분에서 class 초기화는 다른 언어의 초기화 과정과 약간 다른 부분이 있다. 해당 내용은 좀 길어질 수 있어 다음 포스팅으로 넘겼다.
KVC/KVO 는 Apple Framework에서 중요한 부분을 담당한다. 한번 공부해보자. Background 03. Operation Queue에서 간단하게 알아보았던 적이 있다.
지난 글에서는 Objective-C에서 KVC/KVO가 어떻게 쓰였는지 알아보았다. 이번에는 Swift다. Key Value Coding 여기까지는 Objective C에서 사용하는 것들이었다. 이제는 실제 많이 사용하는 Swift에서 어떤지 보자.
이전 글들에서 Objective C의 KeyPath와 Swift에서의 KeyPath를 한번씩 보았다. 모양이 좀 달랐었는데 왜 다른지에 대해서 알아보자. 이번 글은 WWDC 17을 기준으로 한다.
이전에 metatype에 대해 흘려들었었는데, 이번에 간단하게 정리해보려한다. metatype이란? Swift에서 우리는 특정 instance의 Type에 접근할 수 있다.
이미지와 글자가 있는 Button을 만들다가, String안에 image를 넣을 수 있다는 것을 알았다! NSAttributedString 텍스트 일부에 대해 특성(시각적 스타일, 하이퍼 링크 등)이 있는 문자열 텍스트 일부에 대해 특성들을 적용할 수 있는 String이다.
TableView의 index를 조정하면서 NSNotFound라는 값을 넣어주는 것을 보게되었다. 왜 이런 것이 필요한지 알아본다. 핵심 정리 ObjectiveC에는 Optional이 없다.
Notification Center는 꽤나 오래전 부터 iOS의 이벤트 전송 매커니즘으로 자리잡았다. 어떤 요소들이 있는지 확인해보자.
Swift를 처음 공부하면서 가장 어려웠던게 이 Optional인 것 같다. 애초에 개발도 처음할 시기였으니, 이런 자료구조가 왜 필요한지 전혀 몰랐었던 시간이 있었다. 해당 이유는 Either와 Result 이해와 실제 사용예 알아보기 포스트를 참고해주길 바란다.
간단하게 property는 member 변수이다. 그런데 Swift에는 다양한 종류의 property가 존재한다. 사실 어떻게 보면 활용방법? 테크닉에 가깝겠다. 어떻게 property를 관리하는 지 안다면, 실제 코드를 간결하고 읽기 좋게 유지할 수 있다.
Protocol의 경우 POP라는 개념으로 Apple에서 밀어주는? 개념이다.
RunLoop이란 무엇일까? RunLoop Run loop은 일단 Thread와 관련된 녀석이다. 간단하게 말하면, Run loop은 event를 처리하기 위해 만들어진 loop이다. Timer 또한 함께 처리한다.
인덱스로 Array 아이템을 탐색하다보면 항상 마주하는 것이 있다. Fatal error: Index out of range. 잘못하면 런타임에 애플리케이션이 바로 죽어버리기 마련이다. 아무리 염두에 둔다하더라도 우리는 사람인 이상 실수를 하기 마련이다.
Collection 중 Set을 사용하다가 문득, insert와 update의 차이가 뭔지 궁금해졌다! Insert Inserts the given element in the set if it is not already present.
Extended String Delimiters # #""Hello World""# = Hello world 특수문자들을 그대로 표현 가능 String literal 선언을 로 감쌈 escape seqence\n은 아래와 같이 사용 #"Line1\#nLine2# Line1 Line2 Concatenating + 가능 String Interpolation "\(name) 는 \(food)을 먹습니다" Unicode String은 내부적으로 Unicode scalar val...
Structure C언어 등의 구조체보다 다양한 기능 상속 불가능 인스턴스/타입 메서드 인스턴스/타입 프로퍼티 값타입 Swift의 대부분의 큰 뼈대는 모두 구조체 Struct가 선호되는 이유 mutability control에 유리 상태로 인한 부작용 없음 let 선언으로 완전한 immutable 자료형 생성 class의 경우 let 인스턴스여도 member 변수 변경 가능 성능 유리 referencing 소요 시간 감소 compiler가 강력한 최적화 수행 함수형 프로그래밍에서 효과정 immutable 요소를 바탕으로 code 가...
Subscript는 Swift에 있는 새로운 문법이다. 값 접근에 있어서 의미있는 접근 방법을 정의하여 사용할 수 있다. 예를 들어 행렬이 있을 수 있다.
처음에 Swift 공부할 때는 정말 아무것도 몰라서, 힘들었던 경험이 있다. 좋은 기회로 한번더 정리할 시간이 생겼다. 다시한번 전체적으로 훑는 시리즈를 만들어본다. 먼저, Swift가 어떤 언어적 특징을 갖는지, 기본 문법은 어떤지 알아보는 시간을 가지려 한다.
이전 글에서 RunLoop에 대해 알아보았다. Timer도 같이 처리한다 했었는데, 이번에는 Timer에 대해서 알아보려한다. Timer 특정 시간 간격이 지난 후, Target 객체로 메시지를 전송한다.
특정 문자열이나 공백을 제거하려면 어떻게 해야할까? 공백 싹다 지우기 let myString = "This \n is a st\tri\rng" let trimmedString = myString.components(separatedBy: .whitespacesAndNewlines).joined() 양쪽 지우기 var string = " AAAAAAAA " let trimedString = string.trimmingCharacters(in: [" "]) // 양끝단의 특정 문자도...
이전 글에서 초기화를 알아보았다. 그런데 그 과정에서 Two Phase Initialization이라는 생소한 단어를 보았다면 잘 왔다. Swift는 상속 과정에서 모든 instance의 property의 값이 보장되기 위한 방법으로 2단계 초기화 방법을 사용한다.
URLSession을 만들었다면, 그 안에 들어갈 URL과 Request를 정의해야 한다. 이번에도 문서를 보며 알아보자.
iOS App에서 서버와 통신하기 위해 Apple에서는 URLSession이라는 기본 API를 제공하고 있다.
이전 글에서 URLSession, URL, URLRequest 를 생성하는 방법을 알아보았다. 이번에는 어떤 Task들이 있는지 알아보자. Task Apple에서 기본적으로 제안하는 task의 종류는 총 3가지이다.
type alias를 공부하면서 마주쳤던 associated type에 대해 알아본다.
autoreleasepool. 어딘가에서 들어봤지만 언제쓰는지는 전혀 몰랐다.
print와 NSLog는 어떤 차이점이 있을까? Log를 사용해야 하는 이유는 Why we should use Log를 참고하자.
오늘은 작업 중 내가 모르는 코드를 발견해서 글을 써본다. reduce! reduce(::) 형태만 봐왔었는데 reduce(into::) 형태도 있더라! 알아보자.
enum에 static 변수를 사용해서 관리를 하다가 문득 이런 생각이 들었다. Type property에는 2가지 종류, static, class가 있는데 뭐가 다른거지? 이참에 헷갈렸던 용어까지 몽땅 정리해보려 한다.
Semantics Type typealias Kilograms = Double struct Package { var weight: Kilograms } Combine Protocols protocol ReadAccess {} protocol WriteAccess {} typealias AdminAccess = ReadAccess & WriteAccess struct Teacher: AdminAccess {} Int, Double은 어디서든 사용되는 타입이다.
generic을 보면서 몇몇 곳에서 where 키워드를 사용하는 것을 보았다. 한번 정리해야 할 것 같아 공식 문서을 읽어본다. Generic Where Clauses generic에도 where 조항을 넣어 받는 타입에 세부 제약을 추가할 수 있다.