投稿画面とかに、内容が揃っている場合に投稿ボタンをアクティブにしたい時ってあって。つまり送信するデータの型が成立した状態にアクティブにしたい。調べたら失敗イニシャライザというものがあったので、メモしておく
init?というnil許容のinitを実装する
通常、initは初期化が必ず成功する前提があるので、失敗する可能性のあるものを入れると、エラーが出る。
このinit?は、失敗した場合はnilを返すような、失敗許容型のinitになっている。
なので、失敗も許可する場合は、init?を使う
// PostContent構造体の定義
struct PostContent {
let textarea: String
let images: [UIImage]
let pinDetailJson: Data
// 失敗可能イニシャライザ
init?(textarea: String?, images: [UIImage]?, pinDetailJson: Data?) {
guard let textarea = textarea, !textarea.isEmpty,
let images = images, !images.isEmpty,
let pinDetailJson = pinDetailJson else {
return nil
}
self.textarea = textarea
self.images = images
self.pinDetailJson = pinDetailJson
}
}
// 値の例
let val1: String? = "Sample text"
let val2: [UIImage]? = [UIImage()]
let val3: Data? = Data()
// PostContentの初期化とif let
if let postContentData = PostContent(textarea: val1, images: val2, pinDetailJson: val3) {
// 初期化に成功した場合の処理
print("PostContentの初期化に成功しました: \(postContentData)")
} else {
// 初期化に失敗した場合の処理
print("PostContentの初期化に失敗しました")
}
この部分
if let postContentData = PostContent(textarea: val1, images: val2, pinDetailJson: val3) {
ここに、例えばアクティブな投稿ボタンを入れておくことで、
データがきっちり揃った場合に、投稿ボタンをアクティブにすることができる。
便利便利