Home » swift » Page 17

swift

NSOperation Tutorial in Swift

NSOperation in Swift

http://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift

버튼을 탭하거나 텍스트 편집을 시작할 때 iOS/Mac앱이 반응을 멈추는 당혹스러운 경험을 해본적이 있을 것이다. Mac 앱이라면 마우스포인터(흔히 말하는 커서)가 형형색색의 비치볼로 변하는 것으로 지금 UI 반응을 할 수 없다는 것을 알려주는데, iOS앱에서는 이런 기제가 없으므로 사용자는 항상 UI에 반응할 수 있다고 기대하게 된다. 반응하지 않는 앱은 문제가 있거나 느리다고 느껴지고 리뷰에서 좋은 평가를 받기 힘들다.
앱이 항상 반응하도록 하는 것은 말처럼 쉽지 않다. 앱이 한가지 이상의 일을 동시에(사용자 터치에 반응하면서 다른 작업을 하는)해야 한다면 순식간에 여러가지 것들이 꼬이기 쉽다. 메인 런루프에서는 많은 작업을 처리할 시간이 없고 이는 오롯이 UI 반응에 집중해야 한다.
이제 불쌍한 개발자는 메인스레드에서 병렬작업으로 이행해야 한다. 병렬작업은 동시에 여러 개의 작업 스트림이 진행된다는 의미이며, 이를 통해 메인스레드는 항상 사용자의 터치에 반응하게 된다.
iOS에서 이런 작업을 수행하는 방법 중 하나는 NSOperation과 NSOperationQueue를 사용하는 것이다. 먼저 병렬작업을 사용하지 않은 앱을 만들어보자. 이 앱은 매우 버벅이고 느릴 것이다. 그리고 이 앱에 병렬작업을 추가하면 보다 반응이 좋은 UI를 제공하게 될 것이다. 더 보기 »NSOperation Tutorial in Swift

Reflection Type in Swift

Swift에서는 (아직까지) NS…FromString이나 respondsToSelector:와 같은 편리한 메타프로그래밍 도구가 지원되지 않지만, 간접적으로 이런 것들을 지원하게끔 하고는 있다. (추가적으로 네이티브의 성격으로 지원돌 것으로 보인다. 왜냐하면 기본적인 프로토콜들이 내부적으로는 내부 프로토콜을 상속하면서 아무 것도 정의되지 않은 게 많다.) 타입 반영 타입 체크 연산자인 is 가 일종의 타입반영을 지원한다. Objective-C에서 다음과 같은 코드를 볼 수 있는데 – (void)doSomethingWithObject:(id)someObject { if ([object isKindOfClass:[SomeClass class]]) { NSLog(@”object is of type MyObject”); } } 이는 Swift에서 is 연산자로 똑같이 할 수 있다. func doSomething(someObject: AnyObject) { if… 더 보기 »Reflection Type in Swift

[Swift] fast enumeration을 지원하는 Sequence타입

Sequence Type in Swift

Swift는 Objective-C에서 fast-enumeration이라 불리던 집합타입 내 원소 개체들을 순회하는 반복문을 지원한다. (이미 많은 언어들이 이러한 반복문 개념을 지원하고 있다.) Python의 그것과 매우 유사하게 Swift의 for..in 구문은 부적으로 시퀀스, 제너레이터라는 개념을 사용하고 있다.
Swift가 기본적으로 제공하는 Array, Dictionary는 기본적으로 for..in 구문예 적용이 가능하다. 그리고 이들은 내부적으로 SequenceType이라는 프로토콜을 따르고 있는데, 이는 다음과 같이 정의되어 있다. 더 보기 »[Swift] fast enumeration을 지원하는 Sequence타입

Swift는 정말 파이썬보다 빠를까?

애플은 Swift가 파이썬보다 몇 십배 빠르다고 주장하고 있는데, 실질적으로는 파이썬이 더 빠른 것 같이 느껴지는 (심지어 pypy도 아니고) 경우가 너무나 많다. 물론 “어떤 언어가 더 빠르냐”는 질문만큼 바보같은 것도 없긴한데, 개인적으로는 애플이 말하는 것과 반대인 것 같은 체감이 많아서 한 번 확인해보았다. 더 보기 »Swift는 정말 파이썬보다 빠를까?

SwiftDoc.org

Swift 헤더 파일을 읽어들여서 자동 생성되는 Swift 문서 열람 사이트 http://swiftdoc.org

[Swift] 연관 타입(Associated Type)

연관타입(Associated Type)

Objective-C의 Associated Object와 비슷한 명칭이라 좀 헷갈릴 수 있는데, 연관타입은 프로토콜 등에서 현재 타입과 관련이 있는 타입을 의미한다.

연관타입은 프로토콜의 일부에 쓰이는 어떤 타입에 대한 플레이스홀더같은 것으로 프로토콜이 실제로 적용되기 전에는 사용되지 않는 타입1을 말한다. 연관타입은 typealias 키워드를 통해 정의한다. 다음 예는 Container라는 프로토콜의 정의이다.

protocol Container {
    typealias ItemType
    mutating func append(item: ItemType)
    var count: Int { get }
    subscript(i:Int) -> ItemType { get }
}

위 프로토콜은 세 가지 특정을 정의하고 있다. 더 보기 »[Swift] 연관 타입(Associated Type)

String in Swift

Swift의 문자열 수정 (2015. 12. 07) : Swift2.0에서부터 문자열은 더 이상 Collection 타입이 아니므로 [Character] 타입으로 변경할 수 없으며, advance() 함수 역시 전역 함수에서 제거되고 Index 타입의 메소드로 변경되었다. NSString은 유니코드 문자열을 UTF16으로 인코딩한 바이트배열로 문자를 다루는데 비해, Swift의 문자열은 유니코드 문자열의 복잡 다단한 특성들을 정확히 반영하기 위해 애써서 디자인한 흔적들이 눈에 띈다. 보다 자세한 내용에 대해서는 따로 포스팅하겠다. Swift의 문자열은 유니코드 문자열이고, 유니코드의어떤 특징들(여러개의 스칼라 코드가 하나의 문자로 결합하는 등)로 인해서 내부적으로는 단순 배열이 아니다. 따라서 Swift의 문자열은 인덱스에… 더 보기 »String in Swift

[Swift] 코어 이미지

Beginning Core Image in Swift

http://www.raywenderlich.com/76285/beginning-core-image-swift

코어 이미지는 이미지에 손쉽게 필터처리를 할 수 있는 강력한 프레임워크이다. 이는 어지간한 기본적인 사진 효과를 만들어낼 수 있는데, CPU 혹은 GPU 기반으로 프로세싱하고 있어서 매우 빠르다. 그냥 빠른 게 아니라 매우 빠르기 때문에 리얼타임으로 비디오 프레임에 적용될 수도 있다.
코어 이미지 필터는 여러 필터가 연쇄적으로 하나의 사진이나 비디오 프레임에 한꺼번에 적용될 수 있다. 이 때 여러 필터는 하나의 필터로 결합되어 이미지에 적용된다. 이런 방식은 한 번에 하나씩 이미지에 적용되는 것에 비해 훨씬 효율적이다. 더 보기 »[Swift] 코어 이미지