수색…


비고

확장 기능에 대한 자세한 내용 은 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 내의 문자를 취득합니다.

2.2
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
3.0
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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow