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

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

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

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

Q&A

解決済

1回答

614閲覧

Swift3でRealmのstring→intの変換方法

asuuuuuuuuu7

総合スコア16

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

0グッド

0クリップ

投稿2017/12/11 13:28

swift3

1 @IBAction func addToDo(_ sender: AnyObject) { 2 3 4 // 入力チェック 5 if isValidateInputContents() == false{ 6 return 7 } 8 9 // let realm = try! Realm().objects(ToDo.self) 10 var x1 = Int(money.text!) 11 12 var x2 = try! Realm().objects(ToDo.self).filter("zandakab") 13 14 //↓ここの記述がわからないです 15 var x3 = Int(x2) 16 17 var x5 = x3 - x1 18 19 20 money.text! = String(describing: x1) 21 22 // ToDoデータを作成する処理 23 let toDo = ToDo() 24 toDo.name = todoNameText.text! 25 toDo.money = money.text! 26 27 // ToDoデータを永続化する処理 28 do{ 29 let realm = try Realm() 30 try realm.write{ 31 realm.add(toDo) 32 } 33 todoNameText.text = "" 34 money.text = "" 35 }catch{ 36 print("失敗") 37 } 38 tableView.reloadData() 39 } 40 41

上記のようにボタンを押したらまずmoneyをintに変換し、もう一つのRealmにあるzandakaを呼び出してintに変換して引き算をしたいのですが、記述方法がわかりません。
何か方法があれば教えてください、よろしくお願いします。

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

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

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

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

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

fuzzball

2017/12/12 00:23

print(type(of: x2)) と print(type(of: x2.first)) の出力を教えて下さい。
asuuuuuuuuu7

2017/12/12 17:40

出力してみましたが、「terminating with uncaught exception of type NSException」エラーが出てしまい確認することができませんでした。
fuzzball

2017/12/13 02:01

それってprintで落ちているのではなく、filter()で落ちているのではないですか?
asuuuuuuuuu7

2017/12/13 02:08

ボタンを押すと出てきてしまうのでそうかもしれないです、すみません…
guest

回答1

0

ベストアンサー

filter()の結果は配列で返ってくると思うので、今のままではInt型に変換できません。
先頭の要素決め打ちでいいならInt(x2.first)でいけるかも。

投稿2017/12/12 00:21

編集2017/12/12 00:23
fuzzball

総合スコア16731

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

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

asuuuuuuuuu7

2017/12/12 02:11

回答ありがとうございます。 実行してみたところ「cannot invoke initializer for type 'int' with an argument list of type '(ToDo)'」というエラーが出てしまいました。 ToDoはデータベースなのですがそこが原因ということなのでしょうか?
fuzzball

2017/12/12 02:16 編集

あー、こうかな。(Realmのこと知らないのですみません) Int(x2.first.zandakab) ダメだったら、とりあえず「質問への追記・修正、ベストアンサー選択の依頼」への返信をお願いします。 ちなみに .filter("zandakab") は何をしようとしているのでしょうか?
asuuuuuuuuu7

2017/12/12 03:15

Int(x2.first.zandakab)で反応することは確認できました、.filter("zandakab")はRealmのzandakabを持ってきてintに変更のちx1から引き算させるために使用しています。
fuzzball

2017/12/13 02:00

filter()というのは、条件を与えて、その条件に合うデータを取り出すのだと思うのですが、.filter("zandakab")という書き方だとデータを取り出せていないのではないでしょうか? 「何をしようとしているのでしょうか?」という質問は、その条件を聞いています。
asuuuuuuuuu7

2017/12/13 07:34

zandakabに金額を入れるので、「let x2 = try! Realm().objects(ToDo.self).filter("0 < zandaka"」という書き方に変更しましたがこれだと取り出すことはできないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問