콘텐츠로 건너뛰기
Home » Development » Swift » Page 17

Swift

Swift / Cocoa / Foundation / Programming Language / UIKit / AppKit / Swift Standard Library / Swift 문법과 기능 / 공부하면서 알게된 내용들을 정리 / 어느 프로그래밍 언어 덕후의 연습장

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] 코어 이미지

Objective-C 래퍼를 통해 Swift에서 SQLite3를 사용하는 법

이 글에서는 Objective-C로 SQLite3 데이터베이스에 액세스하는 API를 래핑한 간단한 클래스를 작성해보겠다. 사실 Objective-C로 SQLite3를 사용하는 것은 C API를 그대로 사용하면 되는 부분인데, 이렇게 래퍼를 만들면 브릿징헤더만 작성해주면 래퍼 클래스를 Swift에서 그대로 사용할 수 있게 되기 때문에 좀 더 쉽게 사용할 수 있다.

Swift에서 C헤더를 바로 반입할 수 있기 때문에 이 방식은 오히려 번거로울 수 있다. (특히 스펙이 약간만 변경되어도 Objective-C 클래스를 수정해야 한다.) 선택은 각자가 알아서 하시면 되겠다.

더 보기 »Objective-C 래퍼를 통해 Swift에서 SQLite3를 사용하는 법

Chaining Multiple CIFilters

Chaining CIFilters

Swift의 문법적 특징은 Objective-C를 사용할 때보다 훨씬 더 간결하고 간단한 구조의 코드를 작성할 수 있게 해주는데, 이번에는 Swift의 문법을 활용하여 CIFilter를 연쇄적으로 적용하는 자료 구조를 만들어 보도록 하겠다.
기본적으로 하나의 이미지에 여러 개의 필터를 적용하는 경우에는 각 필터의 outputImage 속성을 다음 순서의 필터의 kCIInputImageKey로 전달하는 방식으로 처리할 수 있다.
이를 아예 연산자로 정의하는 것도 가능하다. 이미지 인스턴스는 필터라는 상태로 둘러싸여 그 내부에서 조작되는 엔티티로 볼 수 있기 때문에 필터 자체를 모나드로 볼 수 있다. 더 보기 »Chaining Multiple CIFilters

[Swift] 값타입과 참조타입

값 타입과 참조 타입

https://developer.apple.com/swift/blog/?id=10

Swift의 타입은 크게 두 부류로 나뉘는데, 하나는 “값 타입”으로 각각의 인스턴스가 고유한 데이터의 사본을 가지고 있는 것으로 주로 구조체나 열거타입, 튜플등이 이에 해당된다. 다른 하나는 “참조 타입”으로 이는 각각의 인스턴스가 하나의 데이터 사본을 동시에 참조하는 것으로 클래스의 인스턴스가 여기에 해당한다. 이 글에서는 각 타입의 장점과 언제 어떤 타입을 사용해야 할지를 알아보겠다. 더 보기 »[Swift] 값타입과 참조타입

[Swift] String 타입에 length 메소드가 없는 이유

Swift의 String 타입에는 length 프로퍼티나 메소드가 없다. 이상하게 들리겠지만 실제로 그렇다. Swift에서 문자열의 길이를 구하려면 이럼 메소드 대신에 countElements(_:)라는 글로벌 함수를 사용해야 한다. 더군다나 이 countElements(_:) 함수는 문자열을 처음부터 순회(iterate)하기 때문에 매우 긴 문자열을 다룰 때라면 주의해야 한다. NSString도 length 프로퍼티를 제공하는데 왜 Swift의 문자열 타입은 길이 프로퍼티를 갖지 않을까? NSString은 내부적으로 유니코드 문자열(정확히는 일련의 코드값)을 UTF16 형식으로 인코딩한 값을 갖는다. UTF16에서는 각 유니코드 스칼라값은 16비트 크기의 값으로 변환된다. 여기서 주의할 것은 “한 개의 유니코드 문자”가 아닌 “한 개의 유니코드… 더 보기 »[Swift] String 타입에 length 메소드가 없는 이유

[Swift] 클로저

Closures

Swift에서의 클로저는 코드 블럭과 거의 동일한, 실행 가능한 코드 조각 객체이다. 클로저는 문맥에 따라 주위의 변수들을 캡쳐하여 그 사본을 내부에 저장한다. 함수나 네스팅된 함수는 모두 클로저의 특별한 형태이다.

let myClosure = { (a: Int, b: Int) -> Int in return a + b}

클로저는 그 자체가 문법상 중괄호로 둘러싸져 있으므로 파라미터와 타입시그니처를 그 내부에 작성한다. 여기서 in 문법이 쓰인다. 타입을 추론할 수 있는 경우에는 타입 명시가 필요 없으며, sort 함수의 인자로 쓰이는 등더 보기 »[Swift] 클로저

Swift의 클래스 초기화

공식 문서 일부를 번역한 글 입니다. (수정: 2019.06.18)

용어 번역 및 의미

  • initializer – 초기화 메소드. 객체 인스턴스가 생성될 때 호출되는 init(*)류의 이니셜라이저
  • designated initailizer – 지정 초기화메소드. 해당 클래스 레벨에서 새롭게 추가된 프로퍼티를 모두 초기화할 수 있는 메소드. 부모 클래스의 지정 초기화메소드를 호출해야 한다.
  • convenience initializer – 편의 초기화메소드. 프로퍼티에 적절한 기본값을 추가하여 호출을 간단하게 만든 초기화메소드. 반드시 해당 클래스의 지정 초기화 메소드를 호출해야 한다.
  • 초기화 – Swift에서는 객체를 생성할 때 객체가 요구하는 크기만큼의 메모리를 할당받은 후, 모든 프로퍼티는 해당 객체가 사용되기 전에 반드시 적절한 초기값을 가져야 한다. 프로퍼티에 초기값을 지정해 주는 행위
  • 멤버 – 프로퍼티. 일반적인 의미로 멤버라고 부른다.

클래스 상속과 초기화

프로퍼티가 자동으로 0 혹은 nil로 초기화되는 Objective-C와는 달리 Swift에서는 모든 저장 프로퍼티에 대해서 명시적으로 초기화가 이루어져야 한다. (그렇지 않은 경우 컴파일러가 오류를 내놓는다.)

더 보기 »Swift의 클래스 초기화