아두이노와 함께 하기 위한 간단한 Swift 지식들


참고로 이 글은 Swift 2.2 기준입니다.
저도 구글링을 통하거나 네이버 검색을 통해 하나하나 만들어가고 있는데요.
기존 자료들이 Swift 2.2 이전 버전으로 구현된 것들이 많다보니 바로 적용하는
경우 오류가 발생할 때가 종종 있습니다. Swift 버전을 꼭 확인하시기 바랍니다~


1. selector 표현


selector라 하면 쉽게 생각해서 함수의 파라미터로 다른 함수를 넘길 때, 
이 파라미터로 넘어가는 함수의 type이라고 할 수 있다. 우리가 알고 있는
가장 유사한 예로 callback이라고 생각하면 될 것이다.


가장 흔한 예 중 하나가 NSTimer를 사용할 때이다.

NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(ViewController.sendMessage(_:)), userInfo: data, repeats: true)


여기서 3번째 selector라는 위치에 들어가는 인자가 Swift 2.2 이후 변경되었다.
간략하게 변천 과정을 보면 다음과 같다. (아래 예에서 : 기호는 selector에 인자를 넘긴다는 의미이다)


Objective-c : @selector(sendMessage:)
Swift (2.2 이전) : “sendMessage:”
Swift 2.2 : #selector(sendMessage(_:))


결국 NSTimer.scheduledTimerWithTimeInterval 함수의 의미는 매 1초마다(1번 인자), 반복적으로(5번 인자),
현재 클래스에 있는(2번 인자), sendMessage 함수를(3번 인자) 실행하라는 것이다. 여기서 4번 인자인 userInfo는
selector가 아닌 NSTimer에게 넘기는 부가 정보용 인자이다.


2. Byte 배열을 NSData로 형 변환하기


우선 Swift에는 Byte라는 type은 없다. Byte를 표현하기 위해서는 UInt8이라는 type을 사용하면 된다.
이 UInt8 type의 배열을 NSDate로 형변환 하기 위해서는 다음과 같이 한다.

let protocolData = NSData(bytes:[UInt8], length:6)


첫 번째 bytes 인자에 UInt8 배열을 넘기고 두 번째 length 인자에 UInt8 배열의 길이를 넘긴다.


3. 실행중인 함수명과 라인 수 로그로 찍기

print("\(#function) \(#line)")


4. Class 상속과 Override (재정의)


클래스 간의 상속은 다음과 같이 한다. (상속을 막기 위해서는 final 키워드를 사용한다.)

class SomeSuperClass {
  func sampleMethod () {
    print("printed from super class")
  }
}

// SomeSubClass는 SomeSuperClass를 상속한다.
class SomeSubClass: SomeSuperClass {
  // 부모 클래스의 함수를 Override할 경우 앞에 override 키워드를 붙인다. property도 마찬가지...
  override func sampleMethod() {
    print("printed from sub class")
  }
}


5. class의 import


사용자가 만든 .swift클래스는 import 할 필요 없이 그냥 사용하면 된다.
import는 framework를 사용할 때만 한다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요