[解決済み] Swiftのクラスイントロスペクションとジェネリックス
2022-08-13 14:11:35
質問
を動的に作成しようとしています。
class
インスタンスベースの型をジェネリックスを使用して作成しようとしていますが、クラスのイントロスペクションで困難に遭遇しています。
以下は質問です。
-
Obj-CのSwiftに相当するものはありますか?
self.class
? -
を使用してクラスをインスタンス化する方法はありますか?
AnyClass
の結果をNSClassFromString
? -
を取得する方法はありますか?
AnyClass
などの型情報を、一般的なパラメータであるT
? (C#のtypeof(T)
の構文に似ています)
どのように解決するのですか?
まあ、1つは、Swiftに相当する
[NSString class]
は
.self
(である(参照
メタタイプのドキュメント
を参照してください。)
実際には
NSString.class
は機能しません。そのため
NSString.self
.
let s = NSString.self
var str = s()
str = "asdf"
同様に、swiftのクラスで試してみると...。
class MyClass {
}
let MyClassRef = MyClass.self
// ERROR :(
let my_obj = MyClassRef()
うーん・・・エラーになってる
プレイグラウンドの実行に失敗しました: error: :16:1: error: constructing an object of class type 'X' with a metatype value requires an '@required' initializer
Y().me() ^ <REPL>:3:7: note: selected implicit initializer with type '()' class X { ^
この意味を理解するのに時間がかかりました...結局、クラスが
@required init()
class X {
func me() {
println("asdf")
}
required init () {
}
}
let Y = X.self
// prints "asdf"
Y().me()
いくつかのドキュメントでは、これを
.Type
と表記しているものもありますが
MyClass.Type
はプレイグラウンドでエラーを出します。
関連
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例