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

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

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

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

Q&A

解決済

2回答

967閲覧

【swift】必須じゃなくてもいいデリゲートメソッドを設定したい

miyabi_takatsuk

総合スコア9528

Swift

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

0グッド

0クリップ

投稿2018/06/11 02:25

前提・実現したいこと

いつもお世話になっております。
表記の通り、デリゲートを使用する際、
必ず、処理譲渡先で、メソッドを記載しなくてはいけないかと思うのですが、
それを、UITableViewの

swift

1func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int { 2 3 return 3 4}

などのように、必須で書かなくてもよいデリゲートメソッドを設定したいのですが、
そのようなことはできるのでしょうか。
できるのであれば、やり方をご教授賜りたいです。
自身で調べた限りでは有効な方法が見つからず、難儀しております。

もしそのような方法がない、または、あまり推奨される方法でなければ、
諦めて、記述するようにしようと考えています。

よろしくお願いします。

該当のソースコード

swift

1//例になります。デリゲートの呼び元です。 2import UIKit 3 4protocol AclassDelegate { 5 func testFunc(_ image: UIImage?) 6} 7 8class A { 9 var delegate: AclassDelegate? = nil 10 11 init(){ 12 } 13 14 func testRun(){ 15 let testImage = UIImage() 16 self.delegate?.testFunc(testImage) 17 } 18} 19

swift

1//例になります。デリゲートの呼び先です。 2import UIKit 3 4class B: AclassDelegate { 5 6 var aInstanse: A = A() 7 8 init(){ 9 self.aInstanse.delegate = self 10 } 11 12 // ここで、デリゲートメソッドの記述を、しなくてもいいようにしたい 13} 14

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

ツール:Xcode9.4 使用言語:Swift4

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

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

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

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

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

guest

回答2

0

ベストアンサー

extension使ってダミーを用意する。

swift

1extension AclassDelegate { 2 func testFunc(_ image: UIImage?) {} 3}

別に中身はダミー(空っぽ)じゃなくてもいいけど。

投稿2018/06/11 02:48

fuzzball

総合スコア16731

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

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

miyabi_takatsuk

2018/06/11 03:09

実装できました!大変にありがとうございます!!
guest

0

UITableViewDataSourceの場合、

swift

1 2public protocol UITableViewDataSource : NSObjectProtocol { 3 4 public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 5 6 optional public func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int 7} 8

なので、optionalをつけてみたらどうでしょうか?

単純に考えすぎでした。
https://tech.recruit-mp.co.jp/mobile/swift-optional-method/

投稿2018/06/11 02:45

編集2018/06/11 03:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

miyabi_takatsuk

2018/06/11 03:12

swift4での、カスタムプロトコルでは、下記のようにして、実装できました。 @objc protocol AclassDelegate: NSObjectProtocol { @objc optional func testFunc(_ image: UIImage?) } 大変にありがとうございます!! ちなみに質問なのですが、 既存のクラスなどって、どうやって覗けるのでしょうか? それを覗くことができたら、けっこうカスタムクラスなどに応用きかせやすいかな、と思いまして。
退会済みユーザー

退会済みユーザー

2018/06/11 03:18 編集

@objcをつけて無理に実装することによるデメリットがあるようですので、回答にマイナスをつけてほしいくらいなのですが。 → https://tech.recruit-mp.co.jp/mobile/swift-optional-method/ 覗く?除く?
miyabi_takatsuk

2018/06/11 03:28

覗くというか、「定義に飛ぶ」でOKです! Xcodeの基本的な操作でしたね 汗 大変失礼しました!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問