質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

771閲覧

Swift プロパティをオーバーライドする方法

ataru2222

総合スコア272

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/02/20 02:35

前提・実現したいこと

プロパティをオーバーライドする方法を知りたい

発生している問題・エラーメッセージ

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tomato45

2022/02/20 04:02

そもそも最初の「let realm = try! Realm()」というのがおかしいと思いませんか?
ataru2222

2022/02/20 04:18

回答ありがとうございます。 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に慣れておらず、どこがおかしいのか分からない状況です。 教えていただいてもよろしいでしょうか? よろしくお願いいたします。
hoshi-takanori

2022/02/20 04:21

UIViewController はもともと title プロパティを持っていて、それをオーバーライドする必要はないはず。独自の title プロパティが必要なら、myTitle みたいに名前を変更しましょう。 あと、try! Realm() は Realm の初期化に失敗したらクラッシュすると思いますが、この件とは無関係ですね。
ataru2222

2022/02/20 15:10

回答していただき、ありがとうございました。 UIViewControllerが初期でtitleプロパティを持っている事、教えていただきありがとうございました。 その情報があると、今回のエラーの意味も理解出来ました。 本当にありがとうございました。
guest

回答1

0

ベストアンサー

UIViewControllerには、最初から title という画面のタイトルを格納するプロパティが定義されているので、それを継承したViewControllerは、 title という名前の別のプロパティを新たに作ることができません。

(参考)
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621364-title

ViewControllerで新たに宣言するプロパティの名前は title 以外の名前にする必要があります。

let realm = try! Realm() は問題ありません。

投稿2022/02/20 04:27

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ataru2222

2022/02/20 15:04

出来ました。 まさか雑につけた名前で引っかかっているとは思いもしませんでした。 これからはきちんと命名していきます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問