Swift Language
확장 프로그램
수색…
비고
확장 기능에 대한 자세한 내용 은 Swift Programming Language를 참조하십시오 .
변수와 함수
확장은 함수와 계산 / 상수 get 변수를 포함 할 수 있습니다. 그들은 형식이다.
extension ExtensionOf {
//new functions and get-variables
}
확장 객체의 인스턴스를 참조하려면 self
사용할 수있는 것처럼 사용할 수 있습니다.
예를 들어 문자열의 길이를 반환하는 .length()
함수를 추가하는 String
의 확장을 만들려면
extension String {
func length() -> Int {
return self.characters.count
}
}
"Hello, World!".length() // 13
확장에는 get
변수가 포함될 수도 있습니다. 예를 들어 .length
변수를 문자열에 추가하여 문자열의 길이를 반환합니다.
extension String {
var length: Int {
get {
return self.characters.count
}
}
}
"Hello, World!".length // 13
확장 기능의 초기화 프로그램
확장 프로그램에는 편의 초기화 프로그램이 포함될 수 있습니다. 예를 들어, NSString
을 받아들이는 Int
초기화 가능한 이니셜 라이저 :
extension Int {
init?(_ string: NSString) {
self.init(string as String) // delegate to the existing Int.init(String) initializer
}
}
let str1: NSString = "42"
Int(str1) // 42
let str2: NSString = "abc"
Int(str2) // nil
확장 기능이란 무엇입니까?
확장 은 Swift에서 기존 유형의 기능을 확장하는 데 사용됩니다. 확장은 첨자, 함수, 이니셜 라이저 및 계산 된 특성을 추가 할 수 있습니다. 또한 유형을 프로토콜과 일치시킬 수 있습니다.
당신이 Int
의 계승 을 계산할 수 있기를 원한다고 가정 해보자. 확장에 계산 된 속성을 추가 할 수 있습니다.
extension Int {
var factorial: Int {
return (1..<self+1).reduce(1, combine: *)
}
}
그런 다음 원래 Int API에 포함 된 것처럼 속성에 액세스 할 수 있습니다.
let val1: Int = 10
val1.factorial // returns 3628800
프로토콜 확장
Swift 2.2의 매우 유용한 기능은 프로토콜을 확장 할 수있는 기능입니다.
기본 클래스를 상속하지 않고도 일부 프로토콜을 구현하는 모든 클래스에서 사용할 수 있도록하려는 기능과 관련하여 추상 클래스와 매우 유사하게 작동합니다.
protocol FooProtocol {
func doSomething()
}
extension FooProtocol {
func doSomething() {
print("Hi")
}
}
class Foo: FooProtocol {
func myMethod() {
doSomething() // By just implementing the protocol this method is available
}
}
이것은 제네릭을 사용하여 가능합니다.
제한 사항
문장을 사용하여 더 제한적인 제네릭 형식에 메서드를 작성할 수 있습니다.
extension Array where Element: StringLiteralConvertible {
func toUpperCase() -> [String] {
var result = [String]()
for value in self {
result.append(String(value).uppercaseString)
}
return result
}
}
사용 예
let array = ["a","b","c"]
let resultado = array.toUpperCase()
확장 기능이란 무엇이며 언제 사용합니까?
확장 기능은 기존 클래스, 구조, 열거 형 또는 프로토콜 유형에 새로운 기능을 추가합니다. 여기에는 원본 소스 코드에 액세스 할 수없는 유형을 확장하는 기능이 포함됩니다.
Swift의 확장 기능은 다음과 같습니다.
- 계산 된 속성 및 계산 된 유형 속성 추가
- 인스턴스 메소드 및 유형 메소드 정의
- 새로운 이니셜 라이저 제공
- 아래 첨자 정의
- 새 중첩 유형 정의 및 사용
- 기존 형식이 프로토콜을 따르도록합니다.
Swift Extensions를 사용해야하는 경우 :
- Swift에 추가 기능 제공
- UIKit / Foundation의 추가 기능
- 다른 사람의 코드를 어지럽히 지 않고 추가 기능
- 분류 클래스 : 데이터 / 기능 / 대리인
사용하지 않을 경우 :
- 다른 파일에서 자신의 클래스 확장하기
간단한 예 :
extension Bool {
public mutating func toggle() -> Bool {
self = !self
return self
}
}
var myBool: Bool = true
print(myBool.toggle()) // false
첨자
확장 기능은 기존의 유형에 새로운 첨자를 추가 할 수 있습니다.
다음의 예는, 지정된 인덱스를 사용해 String 내의 문자를 취득합니다.
extension String {
subscript(index: Int) -> Character {
let newIndex = startIndex.advancedBy(index)
return self[newIndex]
}
}
var myString = "StackOverFlow"
print(myString[2]) // a
print(myString[3]) // c
extension String {
subscript(offset: Int) -> Character {
let newIndex = self.index(self.startIndex, offsetBy: offset)
return self[newIndex]
}
}
var myString = "StackOverFlow"
print(myString[2]) // a
print(myString[3]) // c