blob: 0adfd7033ff73e53c749bf6e0c5f55e251566c1f [file] [log] [blame]
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -typecheck -verify
// REQUIRES: objc_interop
import Foundation
class NotCopyable {}
class CopyableClass : NSCopying {
@objc(copyWithZone:) func copy(with zone: NSZone?) -> Any {
return self
}
}
@NSCopying // expected-error {{@NSCopying may only be used on 'var' declarations}}}}
func copyFunction() {}
@NSCopying // expected-error {{@NSCopying may only be used on 'var' declarations}}
struct CopyingStruct {
@NSCopying var x : CopyableClass // expected-error {{@NSCopying may only be used on properties in classes}}
}
class CopyingClassTest {
// These are ok.
@NSCopying var p1 : CopyableClass
@NSCopying var p1o : CopyableClass?
@NSCopying var p1uo : CopyableClass!
@NSCopying weak var p1w : CopyableClass?
// These are not.
@NSCopying let invalidLet : CopyableClass // expected-error {{@NSCopying requires property to be mutable}}
@NSCopying var computed : CopyableClass { get {} set {} } // expected-error {{@NSCopying is only valid on stored properties}}
@NSCopying var notClass : Int // expected-error {{@NSCopying is only valid with types that conform to the NSCopying protocol}}
@NSCopying var x : NotCopyable // expected-error {{@NSCopying is only valid with types that conform to the NSCopying protocol}}
init() {}
}