목록분류 전체보기 (30)
sanichdaniel의 iOS 개발 블로그
Swift의 타입추론은 양방향으로 이루어진다고 한다. 알아보자 Bottom-up 타입 추론 타입 정보가 leaf에서 root으로 전달되는것 var x = 0 literal 0을 보고 x의 타입을 Int로 추론한다. (정수의 literal의 기본 타입은 Int이다.) leaf인 literal이 root인 변수의 타입을 결정한다. let age = 26 // age is of type Int let name = "Toni" // name is of type String let pair = (age, name) // pair is of type (Int, String) pair 튜플의 타입은 (age, name)의 타입으로부터 결정이 된다. 타입체커는 age, name을 코드에서 찾는다. 즉 root인 pai..
Operator Overloading Class, struct는 기존에 존재하는 operator에 대한 자신만의 구현을 제공할수 있다. 이것을 operator overloading이라 한다. operator은 +, -, *, /, %, = 같은 심볼들로 값을 체크하거나, 수정, 합치는데 사용된다 함수를 사용하는것보다 더 간결하게 코드를 표현할수 있을때 사용된다 Equatable 프로토콜 구현이 사실 operator overloading이었다! 출처 www.hackingwithswift.com/example-code/language/how-to-use-operator-overloading
빌드 타임이 어디서 오래걸리는지 측정해보았다. Build Settings의 “Swift Compiler - Custom Flags”, “Other Swift Flags” 에서 -Xfrontend -warn-long-expression-type-checking= 옵션을 추가해주고 빌드해본 결과 == 비교 연산자를 사용하는곳에서 warning이 많이 나왔다. 비교 연산자 타입추론이 오래 걸리는 이유? 비교 연산자 == 은 수많은 곳에서 overload되는 operator이다. (overload: 같은 이름의 다른 메서드들) swift standard library에서만 73곳에서 overload되고 있고, 커스텀하게 만든 타입들에서도 자주 overload 된다. operator는 글로벌 함수처럼 호출되기에,..
Pure function 이란? 1. 같은 인자라면, 같은 리턴 값 (외부에 의존하지 않는다) 2. 사이드 이펙트가 없다 장점 1. 재사용성, 테스트하기 쉬위짐 2. 사이드 이펙트가 적음 함수를 pure하게 만들기 1. 값을 바꾸지 말고, 새로운 값을 리턴하자 extension String { mutating func addSuffixIfNeeded(_ suffix: String) { guard !hasSuffix(suffix) else { return } append(suffix) } } 아래 함수는 값을 mutate 하기에 pure 하지 않다 mutable 값에만 호출할수 있게되고 더러운 var muate assign 코드가 필요해진다. var fileName = contentName fileName..