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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Delegates

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

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回答

872閲覧

コントローラクラスのdelegate宣言に困っていて,delegate=selfができません.

kj8

総合スコア16

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Delegates

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

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クリップ

投稿2019/01/03 15:15

編集2019/01/05 06:21

前提・実現したいこと

delegateを利用して,tableviewcontrollerのセルがタップされたら他クラスの値が更新されるようにしたいです
下記ソースコードの場合,ShareTableViewControllerクラスにおいてセルがタップされたら,そのことをShareViewControllerクラスに伝えてreloadConfigurationしたいです

発生している問題・エラーメッセージ

・ShareTableViewControllerにおいてdelegateのメソッド(delegate.shareTableViewControllerInform())を呼び出せない:エラー内容「Missing argument for parameter #1 in call」 ・ShareViewControllerにおいてdelegateにselfを代入できない:エラー内容「Cannot assign value of type 'ShareViewController' to type 'ShareTableViewControllerDelegate.Protocol'」

該当のソースコード

ShareViewController.swift class ShareViewController: SLComposeServiceViewController, ShareTableViewControllerDelegate{ static var valueOfCell:String = "" var share = ShareTableViewController(style: .plain) override func viewDidLoad() { super.viewDidLoad() //ここでエラー share.delegate = self // titleName self.title = "test"         ・         ・         ・ } ShareTableViewController.swift import UIKit import RealmSwift @objc protocol ShareTableViewControllerDelegate{ func shareTableViewControllerInform() } class ShareTableViewController: UITableViewController { //delegate宣言 var delegate = ShareTableViewControllerDelegate.self override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at:indexPath) ShareViewController.valueOfCell = cell!.textLabel?.text! ?? "" //セルのタップを外したらセル選択を解除する tableView.deselectRow(at: indexPath, animated: true) //ここでエラー delegate.shareTableViewControllerInform() }

補足情報(FW/ツールのバージョンなど)

Swift4 Xcode10.1です 
よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

Swift

1 var delegate = ShareTableViewControllerDelegate.self

というコードがありますが、これだと型そのものを代入していることになります。

Swift

1var delegate: ShareTableViewControllerDelegate?

と宣言すれば代入できると思います。
ただしdelegateがOptional型となるため、呼び出しているところに?や!などを加える必要があります。

【追記】
上記のように変更することで以下のコードではエラーが出なくなるはずです

Swift

1share.delegate = self

しかし、以下のコードでエラーが出るのではないでしょうか。

Swift

1 delegate.shareTableViewControllerInform()

ここは以下のように変更してください。

Swift

1 delegate?.shareTableViewControllerInform()

これはdelegateがnilだったら?以降の処理をしないという記法です。
?を!にした場合は、必ずnilではないという指定で、nilだった場合はエラーとなります。
ひとまず?でプログラムが動くか確認ください。

Optional型に対して?や!は安易に使うものではないのですが、それは今後Optional型を勉強してから対応してください。

投稿2019/01/04 08:13

編集2019/01/05 14:19
nakasho_dev

総合スコア2655

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

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

kj8

2019/01/05 05:56

回答いただきありがとうございます. !や?について詳しく理解できていないため,var delegate: ShareTableViewControllerDelegate?として宣言した場合の呼び出し方法がいまいちわかりません. 呼び出す際に!や?を加えてもエラーが出てしまうのですがどうしたらよろしいでしょうか?
nakasho_dev

2019/01/05 14:19

回答を追記しました。
kj8

2019/01/05 15:57

エラーも解消でき,無事意図するdelegateを使った処理ができました! ご丁寧に回答いただきありがとうございました. 大変感謝しております.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問