스위프트 투어 - 제네릭 Swift


제네릭

제네릭 함수나 형식을 만드려면 앵글 브라켓내에 이름을 적는다.

func makeArray<Item>(repeating item:Item, numberOfTimes:Int) -> [Item] {
  var result = [Item]()
  for _ in 0..<numberOfTimes {
    result.append(item)
  }
  return result
}
makeArray(repeating: "knock", numberOfTimes:4)

함수 메소드는 물론 클래스, 열거형, 구조체까지 제네릭 폼으로 만들 수 있다.

enum OptionalValue<Wrapped> {
  case none
  case some(Wrapped)
}
var possibleInteger: OptionalValue<Int> = .none
possibleInteger = .some(100)

where 를 바디 이전 오른쪽에 지정하여 요구되는 리스트를 나타낸다. 예를 들면 구현해야할 프로토콜 형식이 필요하면 두 형식을 갖게하거나 특정 슈퍼클래스를 가지는 클래스가 필요하다.

func anyCommonElements<T:Sequence, U:Sequence>(_ lhs:T, _ rhs: U) -> Bool where T.Element:Equatable, T.Element == U.Element {
  for lhsItem in lhs {
    for rhsItem in rhs {
      if (lhsItem == rhsItem) {
        return true
      }
    }
  }
  return false
}
anyCommonElements([1,2,3],[3])

<T: Equatable> 은 <T> ... where T:Equatable 과 같은 표현이다.


덧글

댓글 입력 영역