

既存のprotocol(`URLSessionDataDelegate`)にデフォルト実装(override)を行いたいのですが、無視されてしまいます。

目的としては`streamManager(didReceive)`は必ず実装しなければいけないようにしてこの`streamManager(didReceive)`を`urlSession(_:dataTask:didReceive)`内で呼ぶようにしたいです。

[code]

    public protocol StreamManagerDelegate: URLSessionDataDelegate {
      func streamManager(didReceive data: Data)
    }
    
    extension StreamManagerDelegate {
      func urlSession(_ session: URLSession,
                      dataTask: URLSessionDataTask,
                      didReceive data: Data) {
        streamManager(didReceive: data)
      }
    }
    
    class Stream: NSObject, StreamManagerDelegate {
      func streamManager(didReceive data: Data) {
        print(String(data: data, encoding: .utf8)!)
      }
      
      func start() {
         let config = URLSessionConfiguration.default
         let session: URLSession = .init(configuration: config,
                                         delegate: self,
                                         delegateQueue: nil)
      }
    }
    
[/code]

自作のコードではうまく動くのですが、上のコードだとデフォルト実装が反映されないです。

[code]

    protocol SomeTaskDelegate {
      func someTask(didRecieve data: String)
    }
    
    struct SomeTask {
      let delegate: SomeTaskDelegate
    }
    
    protocol CustomTaskDelegate: SomeTaskDelegate {
      func printData(_ value: String)
    }
    
    extension CustomTaskDelegate {
      func someTask(didRecieve data: String) {
        printData(data)
      }
    }
    
    struct main: CustomTaskDelegate {
      func printData(_ value: String) {
        print(value + value)
      }
      
      var value: SomeTask!
      
      init() {
        self.value = SomeTask(delegate: self)
      }
    }
    
    
    main().value.delegate.someTask(didRecieve: "1000")
    
[/code]


CC BY-SA 4.0
2022-01-25T17:31:36.947
85930
2022-01-27T04:10:11.637
2022-01-27T02:56:24.157
40856
40856
question
swift
既存のprotocolにデフォルト実装(override)を行いたい


Swiftで既にCloseされた問題のようです。`Won't Do`としているので、おそらく修正されないのでしょう。

`URLSessionDataDelegate`がSwiftで書かれる日が来ればこの方法が実現可能になると思います。

<https://bugs.swift.org/browse/SR-3349>


CC BY-SA 4.0
2022-01-27T04:10:11.637
85963
2022-01-27T04:10:11.637
40856
85930
answer