public func getVersion() -> Int { #if BEFORE return 0 #else return 1 #endif } public protocol OtherProtocol { init() } #if AFTER // Protocol is always available, type is weak-linked @_weakLinked public struct OtherConforms : OtherProtocol { public init() {} } #endif public protocol OldProtocol { #if AFTER @_weakLinked associatedtype NewType: OtherProtocol = OtherConforms @_weakLinked func newMethod() -> NewType #endif } #if AFTER extension OldProtocol { @_weakLinked public func newMethod() -> NewType { return NewType() } } #endif // Protocol is weak-linked, type is always available #if AFTER @_weakLinked public protocol NewProtocol { func newMethod() } #endif public struct NewConforms { public init() {} } #if AFTER @_weakLinked extension NewConforms : NewProtocol { public func newMethod() {} } #endif // Protocol and type are always available, conformance is weak-linked public struct NewConformanceConforms { public init() {} } public protocol NewConformanceProtocol {} #if AFTER @_weakLinked extension NewConformanceConforms : NewConformanceProtocol {} #endif