Hi All,

If I have a protocol with a property requirement such as:

protocol Foo {
    var value: Int { get }
}

.. and I need to conform to it using an implicitly unwrapped optional like:

struct Bar : Foo {
    let value: Int! = nil
}

.. then the compiler fails with an error:

Playground execution failed: error: scratchpad.playground:5:8: error: type 
'Bar' does not conform to protocol 'Foo'
struct Bar : Foo {
       ^

scratchpad.playground:2:9: note: protocol requires property 'value' with type 
'Int'; do you want to add a stub?
    var value: Int { get }
        ^

scratchpad.playground:6:9: note: candidate has non-matching type 'Int!'
    let value: Int! = nil
        ^
Technically, I understand why the error, and currently work around it with a 
cumbersome:

struct Bar : Foo {
    var value: Int { return _value! }
    let _value: Int? = nil
}

However, I keep wondering - would it not be making sense to accept implicitly 
unwrapped optionals as a conformance to be base-type requirements?  It sort of 
works just like that in all other parts of the language.

Or in other words, is this by design, or should I probably create an issue for 
this?

Thank you.
Cheers,
Anton

P.S. The example is oversimplified for the sake of clarity, in practice the 
property just has to be an optional - implicitly unwrapped or not - because 
it’s a part of the composite that holds unowning reference to its container 
object.

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to