(環境)
xcode:11.3
version 5.1.3
(参考文献)
「たった2日でマスターできるIPhoneアプリ開発集中講座 Xcode 11 Swift5 対応」
2020年1月20日 初版第二刷発行
著者: 藤 治仁・小林 加奈子・小林 由憲
発行人: 片柳 秀夫
編集人:三浦 聡
発行所:ソシム株式会社
基本的にswiftでの調べ方についてご質問させてください。
上記の書籍に基づき、例えば、下記のviewController.swift
において初めてデータの永続化をuserDefaults
クラスを利用することができることを学びました。standard
クラスのregister()
メソッドので永続化したいデータを登録してinteger()メソッドで数値列として登録した永続データの値を取り出すことができるのか。。ふむふむ。というのが思考過程です。
swift
1//viewController.swift 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 // Do any additional setup after loading the view. 6 7 // UserDefaultsのインスタンスを生成 8 let settings = UserDefaults.standard 9 // UserDefaultsに初期値を登録 10 settings.register(defaults: [settingKey:10]) 11 } 12//中略 13 14 // UserDefaultsのインスタンスを生成 15 let settings = UserDefaults.standard 16 // 取得した秒数をtimerValueに渡す 17 let timerValue = settings.integer(forKey: settingKey) 18
また、UserDefaults
のDefinitionを見る限り、それぞれのクラスやメソッドについて、以下の様な記載が確認できました。
Definition
1 2 /** 3 +standardUserDefaults returns a global instance of NSUserDefaults configured to search the current application's search list. 4 */ 5 open class var standard: UserDefaults { get } 6 /** 7 -registerDefaults: adds the registrationDictionary to the last item in every search list. This means that after NSUserDefaults has looked for a value in every other valid location, it will look in registered defaults, making them useful as a "fallback" value. Registered defaults are never stored between runs of an application, and are visible only to the application that registers them. 8 9 Default values from Defaults Configuration Files will automatically be registered. 10 */ 11 12 13 /** 14 -integerForKey: is equivalent to -objectForKey:, except that it converts the returned value to an NSInteger. If the value is an NSNumber, the result of -integerValue will be returned. If the value is an NSString, it will be converted to NSInteger if possible. If the value is a boolean, it will be converted to either 1 for YES or 0 for NO. If the value is absent or can't be converted to an integer, 0 will be returned. 15 */ 16 open func integer(forKey defaultName: String) -> Int
一方で、UiPicker
でユーザーが選択した数値列の値を改めて格納するコードで示されているのが下記の通りなのですが、上記から当然standard
クラスのregister()
メソッドを使うのかと思いきや、setValue()
メソッドが使用されており、setValue
がUserDefaults
クラスに特に言及がなく手詰りという結果になってしまいました。つまり、どの様な場合にはregister()
メソッドでどの様な場合にはsetValue()
メソッドが識別することができないという状況です。
swift
1//SettingViewController.swift 2 3 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 4 // UserDefaultsの設定 5 let settings = UserDefaults.standard 6 settings.setValue(settingArray[row], forKey: settingKey) 7 settings.synchronize() 8 }
基本的な調べ方のアプローチをお尋ねしたいのですが、
① Definitionの構造は例えばUserDefaults
で俯瞰してみると以下の様になっていました。この記載はつまり両クラスがどの様な関係にあることを言いたいのでしょうか。この点からdefinitionからは理解することができませんでした。特に{get}の意味するところが不明でした。
Definition
1open class UserDefaults : NSObject { 2 /** 3 +standardUserDefaults returns a global instance of NSUserDefaults configured to search the current application's search list. 4 */ 5 open class var standard: UserDefaults { get } 6}
②また、①の状況だからこそなのですが、 下記の様なdefitionであるとUserDefaults
のメソッドとしてregister()
がある様に見えてしまいます。実際にはUserDefaults.standard.register()
なのでstandard
クラスとregister()
が並列な関係の様に見えて不思議です。ここら辺のDefinitionの見方を特に知りたいです。
Definition
1open class UserDefaults : NSObject { 2 open class var standard: UserDefaults { get } 3 open func register(defaults registrationDictionary: [String : Any]) 4}
③最後に唯一具体的なことになってしまうのですが、なぜsetValue()
がUserDefaults
クラスの説明の中に出てこないのでしょうか、、①②がわかれば自ずとわかるかもしれませんが。
また、ここら辺の定義やマニュアルの調べ方についてSwiftでわかりやすい解説サイトとかがあればそれをご教示いただくだけでもとても助かります。
長文で申し訳ございませんが
よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー