Files
swift-mirror/test/decl/var/NSCopying.swift

39 lines
1.3 KiB
Swift

// 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() {}
}