콘텐츠로 건너뛰기
Home » swift » Page 16

swift

unowned self

Swift의 클래스가 다른 인스턴스를 프로퍼티로 갖게 되는 경우, 만약 두 인스턴스가 서로를 프로퍼티로 참조하게 되면 상호간에 강한 참조 순환1이 발생하게 된다.
이를 해결하기 위해서는 변수 선언시에 weak이나 unowned를 명시하여 약한 참조가 발생하도록 한다. 더 보기 »unowned self

오일러 프로젝트 03

오일러 프로젝트 세 번째 문제. 이번 문제는 인수의 개념과 관련된 문제이다. 일단 문제는 다음과 같다.

어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 합니다.
예를 들면 13195의 소인수는 5, 7, 13, 29 입니다.
600851475143의 소인수 중에서 가장 큰 수를 구하세요. (http://euler.synap.co.kr/prob_detail.php?id=3)

더 보기 »오일러 프로젝트 03

오일러 프로젝트 02

오일러 프로젝트의 두 번째 문제는 4백만 이하의 피보나치 수열 중에서 짝수인 항을 모두 더한 합을 구하는 문제이다.

피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다
. ( 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... )
 
짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?

더 보기 »오일러 프로젝트 02

Swift의 꼬리 재귀

Natasha ElementTypehe Robot에 꼬리와 꼬리재귀에 대한 글이 올라오고 Digg에서 많은 digg을 얻었는데, 좀 이상해서 내용을 정리해본다. 링크한 글의 저자는 꼬리재귀와, 함수형 언어의 자료 구조인 리스트의 head, tail을 혼동하고 있는 듯 하다. 우선 꼬리재귀에 대해서 먼저 이야기하겠다. 꼬리 재귀는 재귀의 특별한 한 형태이다. 꼬리 재귀를 설명하기 전에 먼저 재귀(recursion)에 대해 알아보자. 재귀는 어떤 함수의 내부에서 스스로를 다시 호출하는 것을 말한다. 예를 들어서 1에서 10 까지의 자연수의 합을 구하는 과정을 재귀적인 처리를 통해서 구한다고 생각해보자. 이렇게 풀어써서 복잡한데, 조금 더 이해하기 쉬운… 더 보기 »Swift의 꼬리 재귀

날짜와 시간을 다루기(Swift)

날짜와 시간 다루기 (Swift)

Swift에서 날짜와 시간을 다루는 방법은 Foundation 프레임워크의 NSDate, NSCalendar, NSDateFormatter, NSDateComponents 등을 사용하게 되므로 Objective-C의 그것과 약간의 문법 차이만 있을 뿐이다.

날짜 계산의 기본 개념

날짜 계산의 단위가 되는 객체는 NSDate이다. 이 클래스는 특정한 시점을 가리키는 정보를 담고 있다. 기본적으로는 기준일시로부터 몇초가 지났는지를 담아서 타임라인 상의 특정한 지점을 가리키게 된다.
Foundation에서 NSDate는 특정한 시점을 가리키는 포인터에 지나지 않는다. 다른 언어들의 date/datetime 객체와 달리 NSDate 클래스 자체로부터 이 날이 무슨 요일인지 등의 정보는 구할 수 없다. 그 이유는 Foundation은 특정 국가나 문화권에 종속되는 규격이 아니기 때문에 어떤 로케일을 적용하느냐에 따라서 한달의 길이라든가 그런 것들이 다를 수 있기 때문이다. 더 보기 »날짜와 시간을 다루기(Swift)

Tuple Unpacking in Swift

Swift에서도 튜플 언팩킹이 되기에, 이를 이용하면 유용하게 쓸 수 있는데…. 예를 들어 두 변수의 값을 바꾸려면 var a = 1 var b = 2 swap(&a, &b) println("now a is (a) and b is (b)") 라고 했던 것을 간단히 (a, b) = (b, a) 라 쓰기만 해도 된다. Xcode 6.1에서 잘 동작하나, 아직 swiftstub.com 쪽에는 반영이 안되는 듯.

Swift – Interacting with C Pointers

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

Objective-C 및 C의 API들은 종종 포인터를 사용한다. Swift의 데이터 타입들은 포인터 기반의 Cocoa API들과 자연스럽게 어울리도록 디자인되었고, Swift는 포인터를 파라미터로 일부 다루고 있다.

포인터와 in/out 파라미터

C와 Objective-C의 함수는 복수의 값을 리턴하지 못하기 때문에 부가정보를 함수 외부로 내보내기 위해서 포인터를 사용한다. Swift는 이런 경우 inout 어트리뷰트를 가진 파라미터를 정의할 수 있어서 Swift에서는 & 문법을 사용하여 var 변수의 포인터를 넘겨줄 수 있다. 예를 들어 UIColorgetRed(_:green:blue:alpha:) 메소드는 4개의 CGFloat* 포인터를 받는데 이는 다음과 같이 사용하여 4개의 변수에 대해 각 컬러 값을 얻어낼 수 있다.더 보기 »Swift – Interacting with C Pointers

Swift 타입으로 변형되는 C 타입들

Swift와 C의 데이터타입 호환
Swift는 기본적인 C 포인터 타입에 대해서는 내부적으로 자동으로 변환을 하게 된다. 예를 들어 const char * 타입의 인자를 받는 함수에는 Swift 문자열을 그대로 넣으면 된다. (이는 해당 C 라이브러리를 import 하는 과정에서 Swift가 C 함수의 인자 타입을 자동으로 변환해준다.) 그 외의 임의 포인터를 사용하는 함수라든지, C 포인터 데이터 타입을 Swift 코드에서 사용해야 하는 경우에는 각 포인터 타입을 Swift 타입으로 사용할 수 있다. 이미 이러한 예는 이전에 다룬 Swift에서 Sqlite 사용하기에서 다루고 있다. 더 보기 »Swift 타입으로 변형되는 C 타입들