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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

515閲覧

SwiftでSegmentedControlの数に応じてRealmの要素を取り出したい

miyuki

総合スコア23

Realm

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2022/03/03 16:01

編集2022/03/03 16:03

前提・実現したいこと

Realmの要素をSegmentedControlの数に応じて取り出し、グラフに描画したいです

該当のソースコード

Swift

1var percentPoints = try! Realm().objects(Post.self).sorted(byKeyPath: "date", ascending: true).value(forKey: "percent") 2@IBAction func SegmentSelected(_ sender: UISegmentedControl) { 3 var numSegments = 0; 4 switch sender.selectedSegmentIndex { 5 case 0: 6 numSegments = 7 7 case 1: 8 numSegments = 30 9 default: 10 numSegments = 12 11 } 12 13 var dataPoints = [Double]() 14 for i in 0..<numSegments { 15 dataPoints.append(Double(percentPoints[i])) 16 } 17 graphView.setData(dataPoints) 18}

Realmに保存してあるpercentは文字列型です。上記のコードと違うファイルで下記のように記述しています。

@objc dynamic var percent = ""

問題点

Value of type 'Any?' has no subscripts

このようなエラーが出てしまいました。型が不明であることから発生するエラーのようなのですが、datePointsに合わせてDouble()で型変換しているので、なぜこのエラーが出ているのかわかっていないです。

試したこと

print(percentPoints)

このようにpercentPointsの中身をコンソールに出力させたところ、Realm内のPercentの内容が適切に表示されました。
しかし、percentPoints[0]と記述し、コンソールに出力させようとした際

Value of type 'Any?' has no subscripts

というエラーが出ました。

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

XCodeのバージョンは12.4です。
ご教授のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Realmは使ったことがないのですが、まだ回答がついていないようでしたので、回答してみます。

Value of type 'Any?' has no subscripts

これはDouble(percentPoints[i])percentPoints[i]の部分で添字(subscripts)でアクセスできずにエラーになっているようですね。
Any?型では添字でのアクセスはできないようです。
https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html

次のリンク先にあるように正しい型にキャストしてあげれば解消できるかもしれません。

Downcasting
Type Casting for Any and AnyObject
https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html#ID341


最初にRealmからオブジェクトを取得する際に、.value(forKey: "percent")をつけずに、
Postクラス全体を取得・保持しておけば、
ダウンキャストせずにposts[i].percentとして扱えるのですかね。

Create, Read, Update, and Delete Objects

swift

1// Get all tasks in the realm 2let tasks = localRealm.objects(LocalOnlyQsTask.self) 3// (略) 4// All modifications to a realm must happen in a write block. 5let taskToUpdate = tasks[0] 6try! localRealm.write { 7 taskToUpdate.status = "InProgress" 8}

https://docs.mongodb.com/realm/sdk/swift/quick-start/#create--read--update--and-delete-objects

間違っていたらすみません・・

投稿2022/03/04 04:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

miyuki

2022/03/04 06:26 編集

ご丁寧にありがとうございます!! percentPoints[0].percent とすることでデータの取得ができました!助かりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問