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

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

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

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

Swift

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

Q&A

解決済

1回答

448閲覧

swift Xcode 二次元配列に格納されている値を取り出したい

otaka

総合スコア22

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/03/11 07:14

最近swiftを使い始めました.
二次元配列に格納されている値を,配列の
要素の番号([0][0]に格納されているもの[2][3]に格納されているものといった具合)を指定し,取り出して表示するプログラムを書こうとしているのですが,エラーになります.

最後の行でエラーを食らっています.
どうぞ,よろしくお願いします.

swift

1import Cocoa 2 3class AppController: NSObject { 4 5 var matrix = [[Int32]](repeating: [Int32](repeating:1, count: 5), count: 5) 6 7 var i:Int32=0 8 var j:Int32=0 9 var k:Int32=0 10 11 12 13 @IBOutlet weak var TextField: NSTextField! 14 15 @IBOutlet weak var TextField2: NSTextField! 16 17 @IBOutlet weak var TextLabel: NSTextField! 18 19 20 @IBAction func Button(_ sender: Any) { 21 22 k=0 23 24 for i in 0..<5{ 25 for j in 0..<5{ 26 k += 1 27 matrix[i][j] = Int32(k) 28//配列の1番目に1,2番目に2,3番目に3...という順に代入しています. 29 } 30 } 31 TextLabel.intValue = matrix[TextField.intValue][TextField2.intValue] 32 } 33} 34

エラー: Cannot subscript a value of type '[[Int32]]' with an index of type 'Int32'

試したこと: 最後の行において,配列の要素番号を,matrix[TextField.intValue][TextField2.intValue]のように変数ではなく,[1][1]のように数を打ち込んだところ欲しい値が得られました.

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

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

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

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

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

fuzzball

2019/03/11 07:21

TextField.intValue と TextField2.intValue の値を教えて下さい。
fuzzball

2019/03/11 07:32

すみません、ビルドエラーでしたね。
otaka

2019/03/11 07:34

記述を忘れていました.ビルドエラーです.
guest

回答1

0

ベストアンサー

短い回答
配列の要素のインデックスには、intValueではなくintegerValueを使ってください。
([]の中に使っているものです。)


長い回答
Swiftは型をきっちりすることでバグの発生を未然に防ぐという思想の元設計されています。

[Int32]の要素を取り出すときのインデックスはInt型でなければなりません。
同じく[[Int32]]の要素を取り出すときのインデックスもInt型でなければなりません。
ところがNSTextField(NSControl)のintValueInt32型です。
このため、型の不一致が起こりエラーとなります。
ですので、Int型の値を返すintegerValueを使用することでエラーが解消されます。

投稿2019/03/11 07:26

MasakiHori

総合スコア3384

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

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

otaka

2019/03/11 07:35

電光石火の回答に感謝します.
otaka

2019/03/11 07:35

動きました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問