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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

387閲覧

【Swift】構造体配列を異なるViewControllerに渡したい

shu__n_p

総合スコア20

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/12/23 08:56

編集2018/12/23 14:43

#recordArrayを別のViewControllerに移そうとしたとろ下記のようなエラーが出てしまいました。構造体の配列は異なるViewContoroller間ではやり取りできないのでしょうか。ご回答感謝します。

error

1Cannot assign value of type '[ViewController.recordStruct]' to type '[recordViewController.recordStruct2]'

ViewController

1struct recordStruct { 2 var record : Double = 0.0 3 var recordtmp : Double = 0.0 4} 5 6var recordArraydepo = [Double]() 7 8var recordArray = [recordStruct]() 9 10for i in recordArray { 11 recordArraydepo.append(recordArray[i].record as! [Double]) 12} 13 14override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 15 if segue.identifier == "next"{ 16 let recordVc : recordViewController = segue.destination as! recordViewController 17 recordVc.recordArray2 = recordArray //エラー 18 } 19 }

recordViewController

1struct recordStruct2 { 2 var record : Double = 0.0 3 var recordtmp : Double = 0.0 4 } 5 6 var recordArray2 = [recordStruct2]() 7

###すべてのコードは下記の通りです。

ViewController

1 2import UIKit 3 4class ViewController: UIViewController { 5 6 @IBOutlet var buttonLabel: UILabel! 7 @IBOutlet var timerSecond: UILabel! 8 @IBOutlet var timerMSecond: UILabel! 9 @IBOutlet var gameButton: UIButton! 10 @IBOutlet var recordLabel: UILabel! 11 12 var timer : Timer! 13 14 var startTime = TimeInterval() //開始した時間 15 16 var currentTime = TimeInterval() //停止した時間 17 18 var time = TimeInterval() //currentTime - startTime 19 20 21 22 struct recordStruct { 23 var record : Double = 0.0 24 var recordtmp : Double = 0.0 25 } 26 27 //var recordstruct : recordStruct 28 var recordArray = [recordStruct]() 29 30 31 32 var recordArraydepo = [Double]() 33 34 var count = 0 35 36 override func viewDidLoad() { 37 super.viewDidLoad() 38 } 39 40 41 42@IBAction func gameButton(_ sender: Any) { //ゲームボタンが押された時 43 44 if count == 0{ //押すのが1回目なら 45 buttonLabel.text = "Stop!" 46 47 timer = Timer.scheduledTimer(withTimeInterval: 0.0001, repeats: true) { (Timer) in 48 self.timerSecond.text = String(Int.random(in: 1 ... 9)) 49 self.timerMSecond.text = String(Int.random(in: 1...9999)) 50 } 51 52 startTime = NSDate.timeIntervalSinceReferenceDate 53 count = 1 54 }else{//押すのが2回目なら 55 56 if timer != nil{ 57 timer.invalidate() 58 } 59 60 currentTime = NSDate.timeIntervalSinceReferenceDate 61 time = currentTime - startTime 62 63 let second = Int (fmod(time, 60)) 64 time -= TimeInterval(second) 65 let msecond = Int (time * 10000) 66 67 timerSecond.text = String(format: "%01d", second) 68 timerMSecond.text = String(format: "%04d", msecond) 69 70 buttonLabel.backgroundColor = UIColor.darkGray 71 self.gameButton.isEnabled = false 72 73 recordArray.append(recordStruct(record: (Double(timerSecond.text! + "." + timerMSecond.text!)!), recordtmp: (Double(timerSecond.text! + "." + timerMSecond.text!)! - 5.000))) 74 75 recordArray.sort(by: {$0.recordtmp < $1.recordtmp}) 76 77 } 78} 79 80 @IBAction func resetButton(_ sender: Any) { 81 buttonLabel.text = "Start!" 82 self.gameButton.isEnabled = true 83 buttonLabel.backgroundColor = UIColor.orange 84 85 timerSecond.text = "0" 86 timerMSecond.text = "0000" 87 88 count = 0 89 } 90 91 @IBAction func recordButton(_ sender: Any) { 92 performSegue(withIdentifier: "next", sender: nil) 93 } 94 95 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 96 if segue.identifier == "next"{ 97 let recordVc : recordViewController = segue.destination as! recordViewController 98 recordVc.recordArray2 = recordArray 99 } 100 } 101} 102 103

recordViewController

1 2import UIKit 3 4class recordViewController: UIViewController { 5 6 @IBOutlet var rank1: UILabel! 7 @IBOutlet var rank2: UILabel! 8 @IBOutlet var rank3: UILabel! 9 @IBOutlet var rank4: UILabel! 10 @IBOutlet var rank5: UILabel! 11 @IBOutlet var rank6: UILabel! 12 @IBOutlet var rank7: UILabel! 13 14 struct recordStruct2 { 15 var record : Double = 0.0 16 var recordtmp : Double = 0.0 17 } 18 19 var recordArray2 = [recordStruct2]() 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 rank1.text! = String(recordArray2[0].record) 25 rank2.text! = String(recordArray2[1].record) 26 rank3.text! = String(recordArray2[2].record) 27 rank4.text! = String(recordArray2[3].record) 28 rank5.text! = String(recordArray2[4].record) 29 rank6.text! = String(recordArray2[5].record) 30 rank7.text! = String(recordArray2[6].record) 31 } 32} 33

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

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

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

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

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

guest

回答1

0

ベストアンサー

###Swiftでは型の名前は大文字で始めてください。小文字で始めるととても読みにくいです

Swiftでは

swift

1 2class A { 3 struct S { 4 let a: Int 5 } 6} 7

の struct A.S と

swift

1class B { 2 struct S { 3 let a: Int 4 } 5}

の struct B.S は別物です。

共通して使われる struct の定義は class の外で行ってください。


追記

sturct の定義を class の外で行うとは上の例でいえば

swift

1 2struct S { 3 let a: Int 4} 5 6 7 8class A {} 9class B {}

とすることです。

その上で両ViewControllerで同じstructを使用してください。

投稿2018/12/23 12:26

編集2018/12/24 01:09
MasakiHori

総合スコア3384

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

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

shu__n_p

2018/12/23 14:51

ご回答ありがとうございます。 初心者なもので、あまりクラスなどを意識せずに書いてしまっていたのですが、MasakiHoriさんの仰っておられるクラスと、class ViewContoroller は別のものになりますでしょうか? 全コードを追記しましたので、ご確認いただけるとありがたいです。
shu__n_p

2018/12/24 06:34

ViewContorollerクラスの上でStructを定義したところ、うまく動作しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問