Swift Language
拡張機能
サーチ…
備考
拡張機能の詳細については、 The Swift Programming Languageを参照してください 。
変数と関数
拡張機能には、関数と計算/定数取得変数を含めることができます。彼らはフォーマットになっています
extension ExtensionOf {
//new functions and get-variables
}
拡張オブジェクトのインスタンスを参照するには、 self
を使用できるように使用することができます
たとえば、文字列の長さを返す.length()
関数を追加するString
の拡張を作成するには
extension String {
func length() -> Int {
return self.characters.count
}
}
"Hello, World!".length() // 13
拡張にはget
変数も含めるget
がget
ます。たとえば、文字列の長さを返す文字列に.length
変数を追加する
extension String {
var length: Int {
get {
return self.characters.count
}
}
}
"Hello, World!".length // 13
拡張子の初期化子
拡張機能には便利な初期化子を含めることができます。たとえば、 NSString
を受け入れるInt
ためのfiableイニシャライザ:
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 Extensionsを使用するタイミング:
- Swiftへの追加機能
- UIKit / Foundationの追加機能
- 他の人のコードを邪魔することなく追加の機能
- 内訳クラス:データ/機能/デリゲート
使用しない場合:
- 自分のクラスを別のファイルから拡張する
簡単な例:
extension Bool {
public mutating func toggle() -> Bool {
self = !self
return self
}
}
var myBool: Bool = true
print(myBool.toggle()) // false
下付き文字
拡張機能は、既存の型に新しい添え字を追加できます。
次の例では、指定されたインデックスを使用して文字列内の文字を取得します。
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