[解決済み] Swiftのstatic funcとclass funcの違いは何ですか?
質問
Swiftのライブラリでこれらの定義を見ることができます。
extension Bool : BooleanLiteralConvertible {
static func convertFromBooleanLiteral(value: Bool) -> Bool
}
protocol BooleanLiteralConvertible {
typealias BooleanLiteralType
class func convertFromBooleanLiteral(value: BooleanLiteralType) -> Self
}
と定義されたメンバ関数と何が違うのでしょうか?
static func
で定義されたものと
class func
? 単純に
static
は構造体や列挙型の静的関数用で
class
は、クラスやプロトコルのために?他に知っておくべき違いはありますか?構文自体にこのような違いがある根拠は何ですか?
どのように解決するのですか?
<ブロッククオート単純に、staticは構造体や列挙型の静的関数、classはクラスやプロトコルの静的関数ということでしょうか?
それが主な違いです。その他にも、クラス関数は動的にディスパッチされること、サブクラスでオーバーライドできることなどの違いがあります。
プロトコルはclassキーワードを使いますが、構造体がプロトコルを実装することを排除しているわけではなく、代わりにstaticを使うだけです。プロトコルにclassが選ばれたのは、staticやclassを表す3つ目のキーワードが不要になるためです。
このトピックに関するChris Lattnerからのコメントです。
<ブロッククオート構文を統一する(例えばキーワードとして"type"を使う)ことも考えましたが、実はそれは物事を単純化するものではありません。 キーワード "class" と "static" は親しみやすく、(+メソッドがどのように機能するかを理解すれば)かなり説明的で、クラスに本当に静的メソッドを追加する可能性を開くのに良いものです。 このモデルの主な奇妙さは、プロトコルがキーワードを選択しなければならないことですが(私たちは "class" を選びました)、バランス的には正しいトレードオフと言えます。
そして、クラス関数のオーバーライド動作の一部を示すスニペットを示します。
class MyClass {
class func myFunc() {
println("myClass")
}
}
class MyOtherClass: MyClass {
override class func myFunc() {
println("myOtherClass")
}
}
var x: MyClass = MyOtherClass()
x.dynamicType.myFunc() //myOtherClass
x = MyClass()
x.dynamicType.myFunc() //myClass
関連
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] init__と__call__の違いは何ですか?
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UML クラス図 enum
-
[解決済み] Swiftのstatic funcとclass funcの違いは何ですか?
-
error #2153: 式はクラス型を持たなければならない (低レベルのエラー: ポインタかオブジェクトかを見る -> と .は正しく使うべき)
-
解決策:クラスオブジェクトに 'functiong' または 'var' という属性がない問題
-
[解決済み] クラス図を作成するためのツール【終了しました
-
[解決済み] クラス vs. ファンクション【終了しました
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み】Roxygen2を使ってS4クラススロットを適切にドキュメント化する方法は?
-
[解決済み】「POCO」の定義
-
[解決済み】Swift。switchステートメントでクラスの型をテストする