前提・実現したいこと
プロパティをオーバーライドする方法を知りたい
発生している問題・エラーメッセージ
Property 'title' with type 'Title?' cannot override a property with type 'String?'
該当のソースコード
swift
1import UIKit 2import RealmSwift 3 4class inputViewController: UIViewController { 5 6 @IBOutlet weak var txtTitle: UITextField! 7 8 let realm = try! Realm() 9 var title: Title! ←★★★★★ここでエラー 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 } 16 17 //backボタンを押した時Realmnい登録する 18 override func viewWillDisappear(_ animated: Bool) { 19 try! realm.write { 20 self.title.title = "" 21 self.title.date = Date() 22 self.realm.add(self.title, update: .modified) 23 } 24 super.viewWillDisappear(animated) 25 } 26 27}
swift
1import RealmSwift 2 3class Title: Object { 4 //管理用ID プライマリーキー 5 @objc dynamic var id = 0 6 7 //タイトル 8 @objc dynamic var title = "" 9 10 //日時 11 @objc dynamic var date = Date() 12 13 //idをプライマリーキーとして設定 14 override static func primaryKey() -> String? { 15 return "id" 16 } 17}
上記の宣言の部分でエラーが起きてしまっています。
訳すと
(タイプ 'Title?' を持つプロパティ 'title' はタイプ 'String?' を持つプロパティをオーバーライドすることはできません。)
と表示されたのですが、以下の型を指定してみる以外の具体的な解決方法が分かりませんでした。
試したこと
・var title:Title Title!
・var title:String Title!
など型を指定してみるも上手くいきませんでした。
こちらのエラーの解決方法について、詳しい方いらっしゃいまいたらご教示ください。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
そもそも最初の「let realm = try! Realm()」というのがおかしいと思いませんか?
回答ありがとうございます。
let realm = try! Realm()
は
override func viewWillDisappear(_ animated: Bool) {
try! realm.write {
self.title.title = ""
self.title.date = Date()
self.realm.add(self.title, update: .modified)
}
super.viewWillDisappear(animated)
}
こちらでrealmに書き込む為に必要だと思っております。
まだSwiftに慣れておらず、どこがおかしいのか分からない状況です。
教えていただいてもよろしいでしょうか?
よろしくお願いいたします。
UIViewController はもともと title プロパティを持っていて、それをオーバーライドする必要はないはず。独自の title プロパティが必要なら、myTitle みたいに名前を変更しましょう。
あと、try! Realm() は Realm の初期化に失敗したらクラッシュすると思いますが、この件とは無関係ですね。
回答していただき、ありがとうございました。
UIViewControllerが初期でtitleプロパティを持っている事、教えていただきありがとうございました。
その情報があると、今回のエラーの意味も理解出来ました。
本当にありがとうございました。
回答1件
あなたの回答
tips
プレビュー