質問: UserDefaults.standard settings.setValue(settingArray[row], forKey: settingKey) settings.synchronize() } ``` 基本的な調べ方のアプローチをお尋ねしたいのですが、 1 Definitionの構造は例えば`UserDefaults` で俯瞰してみると以下の様になっていました。この記載はつまり両クラスがどの様な関係にあることを言いたいのでしょうか。この点からdefinitionからは理解することができませんでした。特に{get}の意味するところが不明でした。 ``` open class UserDefaults : NSObject { /** +standardUserDefaults returns a global instance of NSUserDefaults configured to search the current application's search list. */ open class var standard: UserDefaults { get } } ``` 2また、1の状況だからこそなのですが、 下記の様なdefitionであると`UserDefaults`のメソッドとして`register()`がある様に見えてしまいます。実際には`UserDefaults.standard.register()`なので`standard`クラスと`register()`が並列な関係の様に見えて不思議です。ここら辺のDefinitionの見方を特に知りたいです。 ``` open class UserDefaults : NSObject { open class var standard: UserDefaults { get } open func register(defaults registrationDictionary: [String : Any]) } ``` 3最後に唯一具体的なことになってしまうのですが、なぜ`setValue()`が`UserDefaults`クラスの説明の中に出てこないのでしょうか、、12がわかれば自ずとわかるかもしれませんが。 また、ここら辺の定義やマニュアルの調べ方についてSwiftでわかりやすい解説サイトとかがあればそれをご教示いただくだけでもとても助かります。 長文で申し訳ございませんが よろしくお願い申し上げます。
回答: 質問の意図を私が理解できているかわかりませんが、 1 UserDefaultsというのは、なんとなく「データを永続化してくれるクラス」という理解で良いと思いますが、 実は ・アプリ単体で使う場合 ・複数のアプリ間で共有する場合 の2パターン(もっとある?)が存在します。 前者で取り扱う場合は、とりあえず`UserDefaults.standard`を使うんだな程度の認識でいいです。 { get }は「プロパティかつ取得のみできる(setはできない)」事が定義されている ぐらいの認識でとりあえずはいいです。 2 UserDefaultsはクラス、 registerはUserDefaultsクラスのメンバー関数です。 通常のメンバー関数はクラスのインスタンス経由で呼び出す必要があります。 インスタンスという言葉は今後もちょいちょい出てくるので覚えておいた方が良いですが、 「クラス」がプラモデルの設計図だとしたら、「インスタンス」はその設計図から作成された実際のプラモデルそのものを指します。 要は設計図だけではなんもできないので(※下記のとおり例外あり)、そこから作成されたオブジェクトを用いてメンバ関数などにアクセスする必要があります。 じゃあ「UserDefaults.standard」はなんなのよ?となりますが、 これはクラスプロパティ(※用語の自信無し)と呼ばれているもので、 インスタンスが無くても実行できるようになっているものです。 (通常の変数はvarですが、クラス変数はclass varになっています。) 設計図だけで直接アクセスできるプロパティととらえてもらえればいいです。 まとめると UserDefaultsはクラス、 UserDefaults.standardはクラスプロパティを使ってUserDefaultsのインスタンスを取得(実装がどうなってるか知りませんが、シングルトン的なやつです) UserDefaults.standard.register(...)でようやく、そのインスタンス経由でメンバ関数が呼べる感じです。 3 基本的に困ったら一次ソースを見ましょう。 https://developer.apple.com/documentation/foundation/userdefaults set系はSwiftでは`set(_:forKey:)`のような構文になっています。 解説サイトはあったかなあ・・・。 適当にググって補完してもらうのがよいかなとは思います。