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

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

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

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

解決済

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

ataru2222
ataru2222

総合スコア230

Swift

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

1回答

0評価

0クリップ

228閲覧

投稿2022/02/20 02:35

前提・実現したいこと

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

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

Property 'title' with type 'Title?' cannot override a property with type 'String?'

イメージ説明

該当のソースコード

swift

import UIKit import RealmSwift class inputViewController: UIViewController { @IBOutlet weak var txtTitle: UITextField! let realm = try! Realm() var title: Title!  ←★★★★★ここでエラー override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } //backボタンを押した時Realmnい登録する 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) } }

swift

import RealmSwift class Title: Object { //管理用ID プライマリーキー @objc dynamic var id = 0 //タイトル @objc dynamic var title = "" //日時 @objc dynamic var date = Date() //idをプライマリーキーとして設定 override static func primaryKey() -> String? { return "id" } }

上記の宣言の部分でエラーが起きてしまっています。
訳すと
(タイプ 'Title?' を持つプロパティ 'title' はタイプ 'String?' を持つプロパティをオーバーライドすることはできません。)
と表示されたのですが、以下の型を指定してみる以外の具体的な解決方法が分かりませんでした。

試したこと

・var title:Title Title!
・var title:String Title!

など型を指定してみるも上手くいきませんでした。
こちらのエラーの解決方法について、詳しい方いらっしゃいまいたらご教示ください。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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プロパティを持っている事、教えていただきありがとうございました。 その情報があると、今回のエラーの意味も理解出来ました。 本当にありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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