Bucket Place/IOS Swift

[Swift] Printable protocol, AnyObject, Array function

Cloud Travel 2015. 4. 30. 14:02


여는글


 이번 글에서는 Printable 프로토콜을 알아보도록 한다. 이후에는 AnyObject에 대한 개념을 살펴보고, 배열에 관련된 함수, 문자열에 대한 Index 개념 및 함수등을 알아보도록 하자.



Printable


프로토콜은 공통적으로 개체선언 마지막에 등록해주면 된다. 상속을 하듯이 등록을 하면 된다.


- Printable 포로토콜은 해당 개체가 자신을 표현할 수 있게 해준다.

- 예를들어, JAVA의 toString() 함수 기능을 한다고 볼 수 있다. 

- 사용법은 각각의 개체 선언시 마지막에 ": Printable"을 붙여서 프로토콜을 등록한다. 그리고 개체 내부에 var description: String { } 

  함수를 작성해주면 된다. 이는 Printable 프로토콜이 가지고 있는 기본 변수인 description을 다시 작성한다고 생각하면 된다. 해당

  변수를 String 값으로 반환하게 하면 자동으로 description 값을 받아오게 된다. 


struct People: Printable {

var nickname: String

var age: Int


var description: String{

get {

return "My name is \(nickname). And my age is \(age)."

}

}

}


let people = People(nickname: "cloud travel", age: 20)

println("Inserted people info")

println("\(people)")        // result : My name is cloud travel. And my age is 20.




AnyObject


 AnyObject는 어떤 개체가 그 자리에 와도 상관이 없다는 이야기이다. 하지만 사용전에는 어떤 것인지 분명히 지정해줘야 한다.

 AnyObject를 특정 개체로 지정하는 방법에 as키워드를 사용한다.


var object: AnyObject

let people = object as People


 여기서 People이라는 타입이 존재 하지 않다면 nil값이 오면서 오류가 날 것이다. 또는 지정한 타입을 담을수 없는 경우도 존재한다. 이 역시 nil값을 반환하게 된다. 이를 방지하기 위해서 if let 제어문과 as? 키워드를 이용한다.


if let people = object as? People { ... }

 

 object가 People 타입으로 있을 수 있으면 people에 넣어주고 실행해줘~ 의 의미를 갖는다. 다른 방법으로는 is 키워드를 이용하여 해당 타입을 담을 수 있는지 여부를 먼저 파악하고 실행하는 방법도 있다.


     if object is People { let people = object as People ... }




Array Function


 설명에 앞서서 아래 함수들의 시작은 아래의 배열에서 시작한다고 보자. abc는 문자열이 아닌 특정 개체라고 생각하면 된다.

var a = [a,b,c]



 1. += [T] 


 "x += y"가 "x = x + y"로 작동하는 것을 다른 언어를 통해서 많이 봐왔을 것이다. 스위프트는 배열에도 다음과 같은 연산이 가능한데 이 것의 의미는 배열의 끝에 T 개체를 추가하는 것이다. 


ex) a += [d] // result > a = [a,b,c,d]


2. append(T)


+= [T]와 같은 원리로 작동한다.


ex) a.append(d) // result > a = [a,b,c,d]


3. insert(T, atIndex: Int)


특정 인덱스 위치에 해당 개체를 넣는다.


ex) a.insert(1,d) // result > a = [a, d, b, c]


4. splice(Array<T>, atIndex: Int)


Insert를 확장한 것으로 특정 위치를 시작으로 Array가 추가가 된다.


ex) a.splice([d,e], 1) // result > a = [a,d,e,b,c]


5. removeAtIndex(Int)


특정 위치에 있는 값을 없엔다.


ex) a.removeAtIndex(1) // result > a = [a,c]


6. removeRange(Range)


특정 범위에 있는 값을 지운다.


ex) a.removeRange(0...2) // result > a = []


7. replaceRange(Range, [T])


특정 범위에 있는 값을 [T]로 교체한다.


ex) a.replaceRange(0...1, with: [x,y,z]), a = [x,y,z,c]


8. first, last


첫번째 값과 마지막 값을 가져온다. 배열이 비어있을 경우 nil값이 올 수 있기 때문에 optional 값이다.




마치는 글


 이번에는 간단하게 넘어가는 설명이다. 배열 함수를 소개한 이유는 다른 개체들도 이와같은 이름의 함수로 이뤄져 있기 때문에 이를 숙지하면 다른 곳에 응용할때 큰 문제가 없다고 판단해서이다.