まず大前提として、文字列の受け渡しができるのかどうかもわからない初心者です。
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
エラーが出る箇所は?
どういう意図で String(compos[row]) と書いているのか説明して下さい。
エラーの意味は分かっていますか?
修正箇所が分かるようにして下さい。
consentsizeとは何でしょうか?
エラーの意味はわかっています。
修正箇所にコメントをつけました。
consentsizeはミスです、すみません。
なぜエラーが出ている箇所を修正しないのでしょうか?
String(compos[row]) の意図を説明せずに修正したのはなぜでしょうか?
var compos:[String] = ["四角","長方形","円","楕円"]
と
var compos = ["四角","長方形","円","楕円"]
と違いを説明できますか?
御免なさい、聞かせてください。
上記の書き方に違う意味はあるんですか?
型を明示しているのと、していないの違いだけではないんですか?
あ、つまり、[Any]にすることもできるって言いたいんですか?