> On Mar 24, 2016, at 4:04 PM, Joanna Carter <joa...@carterconsulting.org.uk > <mailto:joa...@carterconsulting.org.uk>> wrote: > > Unfortunately, this doesn't compile… > > extension PropertyType > { > private static func create() -> Property<Self> > { > return Property<Self>.init() > ^ '>' is not a postfix unary operator > } > } > > Which is why I found it necessary to add a typealias like so… > > extension PropertyType > { > private static func create() -> Property<Self> > { > typealias SelfType = Self > > return Property<SelfType>.init() > } > }
Oops, that's definitely a bug. > This doesn't compile either… > > struct PropertyFactory > { > static func createBoundPropertywithValueType(valueType: PropertyType.Type) > -> PropertyProtocol > { > return valueType.create() > ^ Member 'create' cannot be used on value of protocol type > 'PropertyType'; use a generic constraint instead > } > } > > For some reason, as soon as you change the PropertyType extension static func > to return PropertyProtocol… > > extension PropertyType > { > private static func create() -> PropertyProtocol > { > typealias SelfType = Self > > return Property<SelfType>.init() > } > } > > … then, and only then, the factory's method compiles correctly. Oops, my fault, this one is by design. Since we're calling through a dynamic type, our type system isn't able to express the result type `Property<valueType>`, so we need to abstract it behind the PropertyProtocol. > Of course, after all this effort, I still have the problem of how to get the > Any.Type from the SubjectType property of a Mirror into a PropertyType.Type. That one's easy, at least—you can take `Any.Type` and use `as?` to cast it to `PropertyType.Type`. > What would really make life easier here would be the ability to extend Any. > > Any chance? I think that'd be cool. Some people fear the power (and ensuing responsibility) that unleashes, though… -Joe
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution