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

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

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

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

Q&A

1回答

165閲覧

文字列をAppDelegteを使い複数のViewControllerで値の受け渡しをしたい

oeoe

総合スコア10

Swift

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

0グッド

0クリップ

投稿2019/01/10 05:42

編集2019/01/10 06:58

まず大前提として、文字列の受け渡しができるのかどうかもわからない初心者です。

PickerViewで選択した文字列を、AppDelegteを使い別のViewControllerで値を受け取りたいです。

AppDelegteにおいてこのようにsizeを定義し

AppDelegte

1class AppDelegate: UIResponder, UIApplicationDelegate { 2 3 var window: UIWindow? 4 var size: String = "" 5 6 (以下略)

このsizeに以下のViewControllerのPickerViewで選択された値を受け渡したいです。

ViewController1

1   @IBOutlet weak var myPickerView: UIPickerView! 2 @IBOutlet weak var KetteiButton: UIButton! 3 4 var compos:[String] = ["四角","長方形","円","楕円"] 5 6 // PickerViewに必要な処理 7 override func didReceiveMemoryWarning() { 8 super.didReceiveMemoryWarning() 9 } 10 11 func numberOfComponents(in pickerView: UIPickerView) -> Int { 12 13 return 1 14 } 15 16 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 17 18 return compos.count 19 } 20 21 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 22 23 return String(compos[row]) 24 } 25 26 //項目が選ばれた 27 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 28 29 label.text = String(compos[row]) 30 31 } 32 33 //===================================== 34 // KetteiButton が押されたときの処理 35 //===================================== 36 func onClickKettei(sender: UIBarButtonItem) 37 { appDelegate = UIApplication.shared.delegate as? AppDelegate 38 //AppDelegteにcomposで選択された値を格納 39 appDelegate?.size = compos //エラーを吐く 40 } 41

この処理を行うと
Cannot assign value of type '[String]' to type 'String'
とエラーを吐きます。

色々とおかしな点があると思いますが解決策を考えてくださると嬉しいです。

コメントをいただき以下のように修正しました。
エラーは同じ物を吐いているままです。

ViewController1

1 var compos = ["四角","長方形","円","楕円"] //修正箇所 2. 3. 4. 5 6 7 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 8 9 return compos[row]//修正箇所 10 } 11 12 //項目が選ばれた 13 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 14 15 label.text = compos[row]//修正箇所 16 17 } 18

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

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

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

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

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

fuzzball

2019/01/10 05:56

エラーが出る箇所は?
fuzzball

2019/01/10 05:58

どういう意図で String(compos[row]) と書いているのか説明して下さい。
fuzzball

2019/01/10 05:58

エラーの意味は分かっていますか?
fuzzball

2019/01/10 06:47

修正箇所が分かるようにして下さい。
fuzzball

2019/01/10 06:47

consentsizeとは何でしょうか?
oeoe

2019/01/10 06:59

エラーの意味はわかっています。 修正箇所にコメントをつけました。 consentsizeはミスです、すみません。
fuzzball

2019/01/10 07:07

なぜエラーが出ている箇所を修正しないのでしょうか?
fuzzball

2019/01/10 07:08

String(compos[row]) の意図を説明せずに修正したのはなぜでしょうか?
fuzzball

2019/01/10 07:09

var compos:[String] = ["四角","長方形","円","楕円"] と var compos = ["四角","長方形","円","楕円"] と違いを説明できますか?
hameji001

2019/01/10 12:55 編集

御免なさい、聞かせてください。 上記の書き方に違う意味はあるんですか? 型を明示しているのと、していないの違いだけではないんですか? あ、つまり、[Any]にすることもできるって言いたいんですか?
guest

回答1

0

sizeはString型、composは[String]型、なので代入出来ません。

Cannot assign value of type '[String]' to type 'String'

投稿2019/01/10 06:01

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問