Swift4でのSingletonを用いた共通データの値渡し
Swift4でのSingletonを用いた共通データの値渡し
今回デザインパターンの1つであるSingletonを勉強したいと思いまとめてみると共に、
簡単なデータ受け渡しのアプリを作ってみました。
別画面間でのデータの受け渡しや共通データを扱う際に便利なものになります
せっかくなので今回はSwift4での環境でアプリを作成しました(ほぼ今までと変わりませんが・・
Singletonとは?
まずは概要。
ググればすぐに出てきますが、簡単に言うと、
「そのクラスのインスタンスが1つしか生成されないことを保証する」
デザインパターンです。
- Singletonクラスは、staticなSingletonクラスのインスタンスを1つ持つ
- pointとしてはinitをprivateにすること
(後半に記述するがswift4ではoverrideしないといけない?)
ご指摘があった通り、関係ありませんでした。
※実装を見てもらえばわかりますが、親クラスがinit()を実装している場合はoverrideしないとエラーになります。
作ったもの
textFieldとTextViewにそれぞれテキストを入れて、
別画面においても保存したデータを読み込んだり更新できるような簡易アプリを作成しました
Singletonの作成
大事な部分
swift3だとoverrideいらないのにswift4環境だと必須になったみたいです
static let sharedInstance: Singleton = Singleton()
private override init() {}
import Foundation
class Data {
var title: String
var contents: String
init(title: String, contents: String) {
self.title = title
self.contents = contents
}
}
class Singleton: NSObject {
var data = Data(title: "", contents: "")
static let sharedInstance: Singleton = Singleton()
private override init() {}
}
オブジェクト生成
let singleton :Singleton = Singleton.sharedInstance
値の設定
viewcontroller側でデータに変更などがあった時に用いる
func saveTitle(title: String) {
data.title = title
}
func saveContents(content: String) {
data.contents = content
}
@IBAction func tappedButton(_ sender: UIButton) {
guard
let title = textField.text,
let content = textView.text else { return }
singleton.saveTitle(title: title)
singleton.saveContents(content: content)
}
値の呼び出し
設定したデータを呼び出す際に用いる
プロパティにアクセスするといよりはクラスメソッドを呼び出すイメージです。
func getTitle() -> String {
return data.title
}
func getContents() -> String {
return data.contents
}
@IBAction func tappedLoad(_ sender: UIButton) {
textField.text = singleton.getTitle()
textView.text = singleton.getContents()
}
完成
無事別画面においても入力したテキストの内容を渡すことができました。
まぁこの程度なら遷移の際に渡せば十分ですが、実際にアプリを作る際に扱うデータはこんなに少なくないですし、
Singletonがインスタンスを保証してくれているので管理も楽ですね。
今回の実装内容
Author And Source
この問題について(Swift4でのSingletonを用いた共通データの値渡し), 我々は、より多くの情報をここで見つけました https://qiita.com/mcz9mm/items/a58ba981f1b90d5d7ede著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .