[解決済み] 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 では、拡張機能はカテゴリとして知られています。
関連
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] Swiftの@selector()?
-
[解決済み] 既存の静的クラスに拡張メソッドを追加することはできますか?
-
[解決済み】C#には拡張プロパティがある?
-
[解決済み] 既存のオブジェクトに拡張機能を追加するSwiftファイルの命名のベストプラクティスは何ですか?
-
[解決済み] swiftで改行なしの印刷をする
-
[解決済み] Swiftで複数のカスタムセルを持つUITableview
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み] iOSのUITextViewで属性付きテキストへのタップを検出する
-
[解決済み] Swiftのリバースレンジ
-
[解決済み] プロパティの型が内部型を使用しているため、publicを宣言することができない
-
[解決済み] ビルド入力ファイルが見つかりません」Swift 4.2、Xcode 10.0
-
[解決済み] SHA256 in swift
-
[解決済み] SwiftのAnyObjectとAny
-
[解決済み] Swiftで乱数を生成する
-
[解決済み] Swift で CGFloat を切り上げる
-
[解決済み] NSLog(@"%s", __PRETTY_FUNCTION__) の Swift 代替はあるか?