🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

3333閲覧

テキストボックスで入力された値を構造体に格納する方法

yamadayeah90

総合スコア6

Swift

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

0グッド

0クリップ

投稿2021/02/14 12:52

家計簿のアプリを作成しようと思っています。
初期設定の画面を作成しているのですが、テキストボックス、セグメントコントローラで入力された値を構造体に渡したいのですが、多くのエラーが出てしまい、どのように解決したら良いかわかりません。

名前(文字列型)、年齢(数値型)、性別(数値型)として、構造体に値を渡して別画面などでその情報をもとに、表示させる項目などを分岐する予定です。
エラーを解消する方法はありますか?
または、初期設定の情報をまとめる、より良い方法はありますか?

現在出ているエラー
・Cannot infer contextual base in reference to member 'ParsonalInfo'
・Consecutive statements on a line must be separated by ';'
・nstance member 'sex' of type 'Parsonal' cannot be used on instance of nested type 'Parsonal.ParsonalInfo'
・Type annotation missing in pattern
・Value of type 'UISegmentedControl' has no member 'Parsonal'
(上記エラーはsegmentedindexの場所で出ているエラー)

swift

1// 2// ViewController.swift 3// myaccount 4// 5// Created by 家計簿 on 2021/02/14. 6// 7 8import UIKit 9 10class Parsonal: UIViewController { 11 @IBOutlet weak var name: UITextField! 12 @IBOutlet weak var age: UITextField! 13 @IBOutlet weak var sex: UISegmentedControl! 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 //テキストボックスヒントテキスト 18 name.placeholder = "名前を入力してください。" 19 age.placeholder = "差し支えなけれな年齢を入力してください。" 20 //テキストボックスの背景色初期値 21 name.backgroundColor = UIColor.blue 22 age.backgroundColor = UIColor.blue 23 //出現キーボードタイプ 24 age.keyboardType = UIKeyboardType.numberPad 25 //キーボードボタン制御 26 name.returnKeyType = UIReturnKeyType.done 27 age.returnKeyType = UIReturnKeyType.done 28 } 29 class ParsonalInfo { 30 var r_name: String 31 var r_age: Int 32 var r_sex: Int 33 init(r_name: String,r_age: Int,r_sex: Int){ 34 self.r_name = r_name 35 self.r_age = r_age 36 self.r_sex = r_sex 37 } 38 39 @IBAction func Next1(_ sender: Any) { 40 r_name.ParsonalInfo = name.Parsonal.text //名前 41 var r_age.ParsonalInfo = Int(age.Parsonal.text!) //年齢(テキストボックスのStiring型の値をInt型に変換して格納) 42 var r_sex.ParsonalInfo = sex.Parsonal.selectedSegmentIndex //性別(セグメントコントロールの値を格納) 43 } 44 45 46 47} 48 49 50

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

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

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

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

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

guest

回答1

0

ベストアンサー

・Cannot infer contextual base in reference to member 'ParsonalInfo'

Infer というのは「推測する」という意味です。
したがって、上記のエラーは「ParsonalInfoというメンバ(プロパティ)のクラスに関する型を推測することができない(意訳)」という意味になります。

Swift

1 r_name.ParsonalInfo = name.Parsonal.text //名前

とありますが、これは明らかな間違いです(代入させる値も間違っています)

クラス内にクラスを作ることの意図はここでは議論しませんが、一応クラスとそのイニシャライザは作られているので

Swift

1 let person = ParsonalInfo(r_name: name, r_age: age, r_sex: sex)

という具合にインスタンスを作る方法が正しい方法となりあす。

・Consecutive statements on a line must be separated by ';'

Swift の文法として区切りよく解釈することができなかったために、適切な場所に:(セミコロン)を食らえることで、コンパイラが解釈しやすいようにしなさい(意訳)という意味です。

Swiftは慣習的に一行一文なのですが、;を使うことによって一行に複数の処理を含めることが可能なのですが、大抵は根本的な文法ミスで出てくるエラーとなります。

・instance member 'sex' of type 'Parsonal' cannot be used on instance of nested type 'Parsonal.ParsonalInfo'

Swift

1sex.Parsonal.selectedSegmentIndex

の行あたりかと思いますが、前述の通りクラスのインスタンス化とそのアクセス方法を間違っていることが原因です。型指定も循環しているので、コンパイラも混乱している可能性もあります。

おそらく、やりたいことは

Swift

1sex.electedSegmentIndex

の間違いだと思います。

・Type annotation missing in pattern

文法に従った記述でないため、記述内容から型推論を行うことができない(意訳)という意味です。

・Value of type 'UISegmentedControl' has no member 'Parsonal'

これはエラー通り、UISegmentedControl には Parsonal というメンバ(プロパティ)は存在しません、という意味です。

ところで、これは何かのテキストを参考にされたのでしょうか。
あるいは何か別の言語の知識をもとに記述されたのでしょうか。

おそらく、

Swift

1 r_name.ParsonalInfo = name.Parsonal.text //名前

r_name と打ち込み始めたあたりで Xcode はすでにエラーを出し始めていると思いますが、そのような心当たりはないでしょうか。

投稿2021/02/14 13:22

TsukubaDepot

総合スコア5086

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

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

yamadayeah90

2021/02/14 14:56

詳しい回答ありがとうございます。 テキスト参考、他言語の知識などは、無くインターネットで検索して出てきた内容と、自分なりの解釈をもとに作成しています。 上記回答のインスタンスの作成の件ですが、どの行に下記の式を入力したら良いですか? let person = ParsonalInfo(r_name: name, r_age: age, r_sex: sex) またこの後にこの後に、テキストボックスのテキストを変数に代入するのでしょうか? わからないことばかりで申し訳ございません。
TsukubaDepot

2021/02/14 23:00

ネットにある情報の多くは断片的で体系づけられていないので、できれば書籍などで体系づけて学習されるのが良いのではないでしょうか。 クラスや構造体の作り方、処理設定の方法など知るべきことがたくさんあります。 SegmentedControlなど、UI部品からの値の取り出し方なども、多くの書籍に多くの事例を伴って説明してありますので、それを用いるのが一番確実かと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問