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