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

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

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

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

Q&A

解決済

2回答

1162閲覧

delegateする時のインスタンスについて

pegy

総合スコア245

Swift

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

0グッド

0クリップ

投稿2020/03/25 07:29

編集2020/03/25 10:33

(環境)
xcode:11.3
version 5.1.3

(参考文献)
詳解 Swift 第5版
著者 萩原剛志
発行者 SBクリエイティブジャブ式会社

でdelegateに出会い理解ができずに、Qiitaで平易な解説がされている記事を見つけました。

以下のコードの説明において、文中で以下の記載がございます。

outputTextはUITextFieldクラスのインスタンスなので、これは、outputTextのtextプロパティにtextを代入することを意味します。

コードを見ても私にはoutputTextUITextField のインスタンスとして読み取れず、どちらのインスタンスであったとしても、後段の以下の文章との因果関係を読み解くことができません。

なるほど、だからこう実装することでUITextField(inputText)に入力された文字列をUILabel(outputText)に渡せるんですね。

1.実際にUITextFieldクラスのインスタンスであるのか?またそれはどのコードから読み解くことができるのかをアドバイス願えますでしょうか?また、後段との因果関係、なぜUITextFieldのインスタンスまたはUILabelのインスタンスであれば文字列を渡せるのかをご教示願えますでしょうか?

2.また、基本的な理解なのですが、self.propなどでは自分自身のクラスの中のpropプロパティにアクセスできることは理解しているのですが、inputText.delegate = selfの様な記法にけるクラスはそのクラス全体を指している(特定のプロパティやメソッドではない)という理解であっていますでしょうか?

Swift

1import UIKit 2 3class ViewController: UIViewController, UITextFieldDelegate { // 追加記述① 4 5 @IBOutlet weak var inputText: UITextField! 6 @IBOutlet weak var outputText: UILabel! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // 追加記述② 11 inputText.delegate = self 12 } 13 14 override func didReceiveMemoryWarning() { 15 super.didReceiveMemoryWarning() 16 } 17 18 // 追加記述③ 19 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 20 textField.resignFirstResponder() 21 let text = textField.text 22 outputText.text = text 23 return true 24 } 25}

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

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

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

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

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

guest

回答2

0

ベストアンサー

outputTextはUITextFieldクラスのインスタンスなので、これは、outputTextのtextプロパティにtextを代入することを意味します。

Qiitaのテキストに間違いがありますね。outputTextUITextFieldのインスタンスではありません。

1.実際にUITextFieldクラスのインスタンスであるのか?またそれはどのコードから読み解くことができるのかをアドバイス願えますでしょうか?また、後段との因果関係、なぜUITextFieldのインスタンスまたはUILabelのインスタンスであれば文字列を渡せるのかをご教示願えますでしょうか?

outputTextがどのインスタンスか、ということはソースコードの

swift

1 @IBOutlet weak var inputText: UITextField! 2 @IBOutlet weak var outputText: UILabel!

からみてもわかる通りUILabelのインスタンスです。

「なぜUITextFieldのインスタンスまたはUILabelのインスタンスであれば文字列を渡せるのか」と言う部分ですが、上記のtypoを考慮にいれれば「なぜUITextFieldのインスタンス(のプロパティであるtext)であれば文字列を渡せるのか」ということかと思います。

それは、「テキストフィールドに表示されている文字列は、UITextFieldtextプロパティで保持されるから」と言うことになります。 Appleのドキュメントも合わせて参考にされるといいかとおもいます(クイックメニューにも同じような内容は表示されます)。

任意のタイミングでUTTextFieldtextを参照すれば、テキストフィールドに表示されている文字列を取得することができます。しかし、プログラムで逐一textの値を参照することは効率的とはいえません。

なのでどのようにしているかと言うと、Delegateという考え方を使って、ある条件が満たされた場合に呼び出されるメソッドを使い、そのタイミングである操作をしています。

UITextFieldには、textFieldShouldReturn(_:)というデリゲートがあります。

これは、「キーボードのリターン(に相当する)ボタンが押された時」に呼び出されるメソッドです。つまり、「ある条件」で呼び出されるメソッドということになります。

では、「キーボードのリターンボタンを押された時」にする処理とは何でしょうか。

それは、プログラムを組む人間が自由に決めて良い内容です。

Qiitaの例では、リターンボタンを押されたタイミングで「テキストフィールドに入力されている文字列を、ラベルに表示させる」という処理を行わせています(もちろん、それ以外の処理もあります)。

それが、

swift

1 let text = textField.text 2 outputText.text = text

という処理ということになるわけです。つまり、これが**「ある操作」**ということになります。

Delegateの解説は、「移譲する」視点から書かれたものが多いと思います。しかし、最初のうちは「移譲される」側、つまり今回の例だと、エンターボタンを押された時の具体的な処理を移譲される側としてプログラムを記述することが多いとおもます。なので、「移譲される側」としてDelegateの動作を考えてみた方が理解が容易かもしれません。

また、ここ1-2ヶ月の間でも、teratailではSwiftにおけるDelegate処理に関する質問が2,3出ていますので、それらの解説も合わせてご覧になるのも良いかもしれません。

2.また、基本的な理解なのですが、self.propなどでは自分自身のクラスの中のpropプロパティにアクセスできることは理解しているのですが、inputText.delegate = selfの様な記法にけるクラスはそのクラス全体を指している(特定のプロパティやメソッドではない)という理解であっていますでしょうか?

selfというキーワードは、「自分自身のインスタンスそのもの」をあらわします。クラスの中で定義したインスタンスは変数名や定数名でアクセスできますが、自分自身のインスタンスは変数・定数には入れていません(やる方法はあると思いますが)。その代わりselfというキーワードを使って汎用的にアクセスできるようになっているわけです。

inputText.delegate = selfという記述は、delegateという変数に自分自身のインスタンスを入れる定義です。なので、厳密には「クラス全体を指している」という表現ではなく、「自分自身のインスタンスを指している」ということになると思います。

投稿2020/03/25 09:23

TsukubaDepot

総合スコア5086

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

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

pegy

2020/03/26 02:05 編集

コメントありがとうございます。 遅くなり申し訳ございません。一晩中調べながらいろいろ考えても見たのですが、やはりどうしても、わかりません。。。 delegateがある条件を満たした時にある操作というのはわかるのですが、、根本的に理解できない点がございます。 "それは、「テキストフィールドに表示されている文字列は、UITextFieldのtextプロパティで保持されるから」と言うことになります。 Appleのドキュメントも合わせて参考にされるといいかとおもいます(クイックメニューにも同じような内容は表示されます)。" ここが理解することができない点であると思います。 なぜ、UITextFieldのtextプロパティは入力された文字列を保持することができているのでしょうか?また感覚的には @IBOutlet weak var inputText: UITextField! によって、Storyboardで設置した inputTextが文字列などが入力されたことでインスタンスであるinputTextがそのプロパティに入力された文字列を保持しているのであればわかるのですが、「UITextFieldのtextプロパティで保持される」というのはクラスのプロパティに入力された文字列が保持されているという意味ですよね? 仮に、UITextFieldがクラスとしてそのプロパティに入力された文字列が保持されているのであれば、以下の_ textField: UITextFieldによって生成されるインスタンスtextFieldも、クラスでUITextFieldを型として指定しているので、inputTextが使用している型であるUITextFieldと同じプロパティを参照しているということなのでしょうか?このメソッドの引数が意味するところがなんとも理解できない状況です。 func textFieldShouldReturn(_ textField: UITextField) -> Bool { ※これも初歩的すぎるかもしれず、恐れ多くて聞きづらいのですが、func textFieldShouldReturnはプロトコルのメソッドであるという理解でいるのですが、メソッドであれば method() と記述するのに、ここでは func method (arg) -> 戻り値{ } の様にメソッドを作る時の様な記法で記述されています。また実際にはメソッドを作っているわけではなく呼び出しを行っている様に思えるのですが、これはメソッドを呼び出ししているのですよね?であればなぜこの様な記法をしているのでしょうか? 本当に重ねて申し訳ございません。
TsukubaDepot

2020/03/26 02:21

たぶん、pegyさんは変なところに囚われているような気がします。 過去の質問のタグを拝見したのですが、PHPとかJavaScriptについては過去に経験されているので、プログラムの基本的な概念はご理解されていると思います。 私がDelegateメソッドの概念をPHPとかJavaScriptで書ければ比較例が示せるのですが、PHPはかすっただけ、JavaScriptについては読めるか否かも怪しいので、残念ながら比較例が示せません。 それはさておき、3つの追加質問のうち、まず一番最後についてコメントします。 > ※これも初歩的すぎるかもしれず、恐れ多くて聞きづらいのですが、func textFieldShouldReturnはプロトコルのメソッドであるという理解でいるのですが、メソッドであれば > method() > と記述するのに、ここでは > func method (arg) -> 戻り値{ > } func textFieldShouldReturn はメソッドですが、その具体的な処理は「自分で」関数として記述する必要があります。メソッドとして具体的に呼び出すのはUITextFieldの方です。そのような処理が「Delegateメソッド」と呼ばれているものです。 つまり、UITextFieldはあくまでもテキストフィールドを作り、そこに入力される文字列(数値も含む)に関する表示処理を行っているだけです。 入力された文字列に対して、具体的にどのような処理を行うかについてはユーザが決める必要があります。したがって、その具体的な処理はユーザが関数(メソッド)という形で記述する必要があり、またそのメソッドの名前のひとつが「func textFieldShouldReturn(引数)->返り値」という形で決められているわけです。 Delegateメソッドというのは、ある意味C言語でいえばコールバック関数と似ているかもしれませんので、そのあたりが理解のヒントになる可能性はあります。 ほかのコメントへのコメントはまた返しますのでお待ちください。 > 本当に重ねて申し訳ございません。 私はこれも自分の勉強だとおもっているので別に構いませんから大丈夫です。 真摯に取り組んでいただけるのがなによりです。
TsukubaDepot

2020/03/26 02:46 編集

pegyさんの混乱の原因がわかったような気がします。 ViewControllerクラスの冒頭にある @IBOutlet weak var inputText: UITextField! と、Delegateで呼び出されるメソッドの func textFieldShouldReturn(_ textField: UITextField) -> Bool { のtextField の二つがあることが混乱の原因だという気がします。 答えから言うと、inputTextもtextFieldも、両方とも同じインスタンスです。 なので、 let text = textField.text も、これを let text = inputText.text と書き換えても全く同じ動作をします(一番良いのは、ご自身で実験的にプログラムを組まれて、動作を確認されることだと思います)。 textFieldShouldReturnは、呼び出される時の引数にUITextFieldのインスタンスが入りますし、そのように定義されています。 じゃあなぜ、引数に自身のインスタンスが入っているのかというと、呼び出し先が直接UITextFieldのインスタンスを参照できない場合もあるからです。ただ、これを考え始めるとまたややこしいので、いまは「そういうもの」と思って先に進むのがよいかもしれません。 きちんと理解することは大切だとおもいますが、そこにとらわれすぎて詰まってしまうのはもったいないような気もします。
TsukubaDepot

2020/03/26 03:02

> textFieldShouldReturnは、呼び出される時の引数にUITextFieldのインスタンスが入りますし、そのように定義されています。 ですが、「石川洋資・西山勇世著、改訂新版Swift実践入門」の第11章ベント通知第2節デリゲートパターンの命名規則(pp.276-278)に詳しい解説が載っていました。 引用すると、 CoCoaのデリゲートパターンでは、メソッド名をデリゲート元のオブジェクト名から始め、第一引数にデリゲート元のオブジェクトを渡すことになっています。 とあります。 また、その数行前の記述には、「オブジェクト(インスタンス)が必要ないのに、なぜオブジェクトを渡しているのか、ということについても記述してあります。 textFieldShouldReturnも、今回のパターンで動作させる上では、第一引数でUITextFieldのインスタンスを渡す必要はありません。しかし、もっと汎用的な場合を考えるとインスタンスを参照しなければならないパターンもありますし、いずれdelegateとして呼び出されるメソッド名の衝突が起きる可能性もあります。 なので、そう言うことを考えて第一引数にはインスタンスを渡すように「設計」されている、と考えるのが妥当なのかもしれません。 --- 石川洋資・西山勇世著、改訂新版Swift実践入門」は、hoshi-takanoriさんも以前の回答でお勧めされていた書籍で私も同じものをもってます。荻原先生の書籍が言語の仕様が中心であり、デザインパターンについてはあまり触れられていないのに対して、こちらの本はより実践的な使い方で記述してあります。ただ、Swift4対応ですし、近々Siwft5対応の改訂版が出るらしいので、それを待っても良いかもしれません。
pegy

2020/03/26 04:11

詳細ご回答をいただきありがとうございます。 なるほど、まず func textFieldShouldReturn(引数)->返り値 はメソッドであり(呼び出しではない) 「delegateメソッド」でありリターンされた時にどの様に処理がされるのかを自分自身でコールバック関数の様に定義する必要があるということが整理することができました。
pegy

2020/03/26 04:24

また、ここでの引数の問題ですが、今回の例示では (_ textField: UITextField) と置かれていますが、これはinputTextと同じインスタンスである、従ってtextプロパティに保持されている値は当然同じであるということかと思います。 ※確かに let text = inputText.textや inputText.resignFirstResponder() も同じ様に動作させることができました。 ここで、少し不思議に感じて実験してみたのですが、なぜ func textFieldShouldReturn(_ textField: UITextField) -> Bool { の引数はinputTextとは異なる名称で引数として設定されているのに、inputTextと同じインスタンスであることが理解できるのであろうかということです。
TsukubaDepot

2020/03/26 04:24

コールバック関数との細かい違いはさておき、まずは動作として「コールバック関数」のイメージで考えるのがいいかもしれませんね。
pegy

2020/03/26 04:24

import UIKit class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var inputText_1: UITextField! @IBOutlet weak var inputText_2: UITextField! @IBOutlet weak var outputText: UILabel! override func viewDidLoad() { super.viewDidLoad() inputText_1.delegate = self inputText_2.delegate = self // Do any additional setup after loading the view. } // 追加記述③ func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() let text = textField.text outputText.text = text return true } }
pegy

2020/03/26 04:26

の様に、二つのインスタンス @IBOutlet weak var inputText_1: UITextField! @IBOutlet weak var inputText_2: UITextField! を設定すれば、 func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() let text = textField.text outputText.text = text return true } の_ textField: UITextFieldはどちらのインスタンスを識別しているのかということを試してみようと思いました。
pegy

2020/03/26 04:27

すみません、そもそも以下のエラーで実行することができませんでした。。 2020-03-26 13:26:10.745466+0900 sample[8880:8367679] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<sample.ViewController 0x7ff53f901670> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key inputText.' *** First throw call stack:
pegy

2020/03/26 04:30

func textFieldShouldReturnの引数に入るインスタンスはdelegateで通知されたTextFeildのインスタンスが名前は違えど(textField とinputText)格納されると思ってしまって差し支えないものなのでしょうか? 上で試そうとしたことは、複数のTextFeildがあれば、引数に入ってくるインスタンスはどうやって決まるのだろうという疑問からのアプローチでした。
pegy

2020/03/26 04:36

また、別件の確認ですが、「textFieldShouldReturnも、今回のパターンで動作させる上では、第一引数でUITextFieldのインスタンスを渡す必要はありません。」・・・(中略) ・・・「なので、そう言うことを考えて第一引数にはインスタンスを渡すように「設計」されている、と考えるのが妥当なのかもしれません」という点についてですが、実際に以下の様なコードで引数なしで試してみたところ func textFieldShouldReturn() -> Bool { inputText.resignFirstResponder() let text = inputText.text outputText.text = text return true } エラーは出力されずにLabelは対応する文字列に置き換わることがないということがわかりました。これは今回の動作に関しては実際にはインスタンスを引数として渡す必要があるという理解で正しいのでしょうか? んん、コメント蘭がリッチテキストでないのが非常に読みづらくて申し訳ございません。
TsukubaDepot

2020/03/26 04:55

Xcodeをアップデート中で確認できないので、コメントしやすいところからコメントします。 > エラーは出力されずにLabelは対応する文字列に置き換わることがないということがわかりました。これは今回の動作に関しては実際にはインスタンスを引数として渡す必要があるという理解で正しいのでしょうか? いや、これはそもそもtextFieldShouldReturn() ->Bool が呼び出されていない、ということです。 なぜ呼び出されないのかと言うと、delegateとして呼び出されるためには、仮引数や個数を含めて(プロトコルで定義されている)宣言と一致させなければいけないからです。 func textFieldShouldReturn() -> Bool は、delegteとして宣言されている型とは一致しないため、よびだされることはありません。もちろん、メソッドの宣言としては有効なので、エラーになることもありません。 じゃあ、どのような型のdelegateが定義されているか知る方法ですが、そのうちいくつかは下記のような方法があります。 1. class ViewController の行にある UITextFieldDelegate という文字を、command+クリックし、jump to definition でプロトコルとしての宣言を見てみる。 2. 同じくcmd+クリックでShow quick helpを選択し(もしくは、Option+クリック)、表示された説明を読む(どのような処理が行われるのか割合詳細に記載されています) 3. quick help一番下のリンク(open in Developer Documentation)からドキュメントを開き、その中のTopicks に列挙されたメソッドを見て、必要に応じてリンク先を参照する。ちなみに、ここで9つほど宣言されているメソッドが、UITextFieldの(正確にはUITextFieldDelegateで定義された)delegateの一覧になります。 ちなみに、Xcode でコードを打ち込んでいる途中に func text と打ち込むと、delegate として定義された関数の候補がリストとして出てきますので、それを手がかりに知る方法もあります。 逆に言えば、ここの候補に出てこないものは delegate として呼び出されない、と言えるかと思います。
TsukubaDepot

2020/03/26 05:02

> すみません、そもそも以下のエラーで実行することができませんでした。。 全く同じコードで試しましたが、こちらでは動きました。 ちなみに、「this class is not key value coding-compliant for ...」はStoryBoardでの接続がうまくいっていない時のエラーなので、接続を確認されてみてはいかがでしょうか。
pegy

2020/03/26 05:14

@available(iOS 2.0, *) optional func textFieldShouldReturn(_ textField: UITextField) -> Bool // called when 'return' key pressed. return NO to ignore. が所謂、型なのかと推察します。jump to Definitionで調べました。最近はこの技を知ってからこまめに見る癖もついてきました! さて、 「textFieldShouldReturnも、今回のパターンで動作させる上では、第一引数でUITextFieldのインスタンスを渡す必要はありません。」 というところから、引数はいらないんだという様に解釈してしまったのですが、実際にはそういう意味ではないということですね。細かいところで引っかかってしまい申し訳ございません。
TsukubaDepot

2020/03/26 05:17

ああ、それは確かに私の例えがよくなかったですね。 ごめんなさい。 もっと一般的な話(delegteというパターンにおいては、第一引数に呼び出し元のインスタンスは必要がない)にしておくべきでしたね。
pegy

2020/03/26 05:18

> 全く同じコードで試しましたが、こちらでは動きました。 ちなみに、「this class is not key value coding-compliant for ...」はStoryBoardでの接続がうまくいっていない時のエラーなので、接続を確認されてみてはいかがでしょうか。 ちょっとすぐにやり直してみます。
pegy

2020/03/26 05:21

>もっと一般的な話(delegteというパターンにおいては、第一引数に呼び出し元のインスタンスは必要がない)にしておくべきでしたね。 申し訳ございません、私の解釈力の問題です!
退会済みユーザー

退会済みユーザー

2020/03/26 05:26

呼び出し元が呼び出し時に、自分自身を引数に突っ込んできて、それがEquitableとかになってるから、==とかswitchとかでインスタンスの比較ができるんじゃないの?(適当)
pegy

2020/03/26 05:37

一から作り直して、動作させることができました。 コードを追加・削除する時にView Controllerのoutletsの紐付きも削除しているつもりなのですが、どこかでうまく行ってなかったのかもしれません。 もっと、早くエラーコードをみて、すぐ当たりをつけることができる経験値を積みたいです!。 さて、お試しで以下のコードを動作させることができたのですが、つまりinputText_1で文字入力してリターンをするとinputText_1の文字が inputText_2で文字入力してリターンをするとinputText_2の文字が outputTextに出力されるという動作になります。 なぜ、 func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() let text = textField.text outputText.text = text return true } の引数で具体的にどのインスタンスか指定していないにもかかわらず、両方とも入力された状態でinputText_2入力後にリターンを押して、inputText_1の入力ちがoutputTextに出力されないのかが不思議でした。これはSwiftが(_ textField: UITextField)の引数に入っているインスタンスがリターンされたtextFieldの.textをみに行っており、UITextFieldDelegateのプロトコルのメソッドであるtextFieldShouldReturnというのはそういうものであるとというふうに認識することができました。 Javascriptでも $('.class').on('click',function(event){ event.// }) の様にクリックされた要素のevent(オブジェクト)でコールバック処理をする様な書き方があり、これと照らすと非常にしっくりする様な気がいたします。 ※ここでJSのお話を持ってきてしまい申し訳ございません。あとで私みたいな想像力のない人がみた時にあー、なるほどと思える様に書き残しました。 import UIKit class ViewController: UIViewController ,UITextFieldDelegate{ @IBOutlet weak var inputText_1: UITextField! @IBOutlet weak var inputText_2: UITextField! @IBOutlet weak var outputText: UILabel! override func viewDidLoad() { super.viewDidLoad() inputText_1.delegate = self inputText_2.delegate = self // Do any additional setup after loading the view. } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() let text = textField.text outputText.text = text return true } }
TsukubaDepot

2020/03/26 05:49

> もっと、早くエラーコードをみて、すぐ当たりをつけることができる経験値を積みたいです!。 実は、単にエラーメッセージのうち汎用的な部分(this class is not key value coding-compliant for)だけを検索しただけです。 for の先は具体的なインスタンス名などになっていて、検索キーワードのノイズになってしまいますから、どのようなエラーでも同じく表示される部分だけで検索すれば比較的容易に見つかると思います。 JavaScriptで比較できる例があれば、それに照らし合わせてみるのが一番いいかもしれませんね。他言語での知識は新しい言語の獲得に役立つと思います。 この先の話になりますが、じゃあ「ふたつのTextFieldのうち、どちらから呼び出されたのか」という疑問が出てくることも間近だとおもいますが、それはtyobigorouご指摘の==を使った比較や(つい最近、どなたかが質問されて、自己解決した質問にもありました)、あるいはtagをつける方法で解決できますので、そのときに思い出されるといいかとおもいます。
pegy

2020/03/26 07:14

ご丁寧なご説明を賜り、またずっと同じことを考えていたので、なんとなく理解が進んできました。 ちょっと、混乱を避けるためにいったん頭を少しスッキリさせて整理してみたいと思います! 本当にご親切にありがとうございました!
guest

0

コードを見ても私にはoutputTextはUILabelのインスタンスとして読み取れず、

以下のように outputText は UILabel! と宣言されてますので、outputText は UILabel のインスタンスですね。

swift

1 @IBOutlet weak var inputText: UITextField! 2 @IBOutlet weak var outputText: UILabel!

後段との因果関係、なぜUITextFieldのインスタンスまたはUILabelのインスタンスであれば文字列を渡せるのかをご教示願えますでしょうか?

以下の 2 行ですが、まず最初の行で textField の text プロパティ、つまり入力されたテキストを text という変数に代入します。次に、その text を outputText というラベルの text プロパティ、つまりラベルに表示されるテキストとしてセットします。

swift

1 let text = textField.text 2 outputText.text = text

「なぜUITextFieldのインスタンスまたはUILabelのインスタンスであれば文字列を渡せるのか」という質問がいまいち理解できてませんが、
・UITextField はテキスト入力欄であり、入力されたテキストを text プロパティで取得できる
・UILabel はテキストを表示するラベルで、表示するテキストは text プロパティで指定する
ということが分かれば、コードの意味も理解できるのではないでしょうか。

inputText.delegate = selfの様な記法にけるクラスはそのクラス全体を指している

inputText.delegate = self にはクラスは出てきません。self のことであれば、ViewController クラスのインスタンスそのものを指します。(あまりインスタンス「全体」とは言いませんが、インスタンスの一部ではないという意味で「全体」と言えないこともないとは思います。)

以上、回答になってるといいのですが。

投稿2020/03/25 09:16

hoshi-takanori

総合スコア7901

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

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

pegy

2020/03/26 07:17

コメントをいただきありがとうございます。 概ねご回答については理解することができました。 また、私の当初の質問に致命的なタイポがあり誤解を招いてしまい、申し訳ございません。 コードを見ても私にはoutputTextはUITextField のインスタンスとして読み取れず、どちらのインスタンスであったとしても、後段の以下の文章との因果関係を読み解くことができません。 と修正しているのですが、UITextField の箇所をあろうことかUILabelにしてしまっていました。大変失礼いたしました。 よろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問