// All of this is required in order to produce materializeForSet // declarations for A's properties. public protocol NilLiteralConvertible { init(nilLiteral: ()) } public enum Optional : NilLiteralConvertible { case none case some(T) public init(nilLiteral: ()) { self = .none } } public struct Y {} public struct X { public var a : U public init(_a : U) { a = _a } public func doneSomething() {} } public class A { public var y : Y public var x : X public init() { y = Y() x = X(_a: y) } public func doSomething() { x.doneSomething() } }