1. ホーム
  2. swift

[解決済み] Swiftの拡張機能例

2023-03-25 22:08:54

質問

私はもともと、このようなものを作る方法を知りたかったのです。

UIColor.myCustomGreen

で、独自の色を定義して、アプリ全体で使えるようにしました。

私は以前に拡張機能を勉強したことがあり、おそらく私の問題を解決するためにそれらを使用できると思ったのですが、拡張機能を設定する方法を正確に思い出すことができませんでした。この記事を書いている時にGoogleで "Swift extension" と検索すると、結果的に ドキュメント , いくつかの 長い チュートリアル と、やや不親切な Stack Overflow の 質問 .

回答はそこにありますが、ドキュメントやチュートリアルを掘り下げる必要があります。私は、Stack Overflow にもっと良い検索キーワードを追加し、拡張機能がどのようにセットアップされるかについて簡単な復習を提供するために、この質問と次の回答を書くことにしました。

具体的には、私は知りたかったのです。

  • 拡張子はどこに存在するのか(ファイルおよび命名規則)?
  • 拡張機能の構文とは何ですか?
  • よくある簡単な使用例とは?

どのように解決するのですか?

拡張機能の作成

新しい swift ファイルを ファイル > 新規作成 > ファイル... > iOS > ソース > Swift ファイル . 名前は好きなようにつけてください。

一般的な命名規則では TypeName+NewFunctionality.swift と呼ぶのが一般的です。 .

例1 Double

ダブル+コンバージョンズ.swift

import Swift // or Foundation

extension Double {

    func celsiusToFahrenheit() -> Double {
        return self * 9 / 5 + 32
    }

    func fahrenheitToCelsius() -> Double {
        return (self - 32) * 5 / 9
    }
}

使用方法です。

let boilingPointCelsius = 100.0
let boilingPointFarenheit = boilingPointCelsius.celsiusToFahrenheit()
print(boilingPointFarenheit) // 212.0

例2 String

文字列+ショートカット.swift

import Swift // or Foundation

extension String {

    func replace(target: String, withString: String) -> String {
        return self.replacingOccurrences(of: target, with: withString)
    }
}

使用方法です。

let newString = "the old bike".replace(target: "old", withString: "new")
print(newString) // "the new bike"

ここで は、より一般的な String の拡張子があります。

例3 UIColor

UIColor+CustomColor.swift

import UIKit

extension UIColor {

    class var customGreen: UIColor {
        let darkGreen = 0x008110
        return UIColor.rgb(fromHex: darkGreen)
    }

    class func rgb(fromHex: Int) -> UIColor {

        let red =   CGFloat((fromHex & 0xFF0000) >> 16) / 0xFF
        let green = CGFloat((fromHex & 0x00FF00) >> 8) / 0xFF
        let blue =  CGFloat(fromHex & 0x0000FF) / 0xFF
        let alpha = CGFloat(1.0)

        return UIColor(red: red, green: green, blue: blue, alpha: alpha)
    }
}

参照 を参照してください。 もご覧ください。

使用方法

view.backgroundColor = UIColor.customGreen

注意事項

  • 一度拡張機能を定義すると、ビルトインのクラス関数と同じように、アプリのどこででも使用することができます。
  • 関数やプロパティの構文がよくわからない場合は、以下のようにします。 オプション +クリックすると、同様の組み込みメソッドが表示されます。たとえば、私が オプション を+クリック UIColor.greenColor という宣言がありますね。 class func greenColor() -> UIColor . これは、私のカスタムメソッドを設定するための良いヒントを与えてくれます。
  • 拡張機能のための Apple ドキュメント
  • Objective-C では、拡張機能はカテゴリとして知られています。