Files
swift-mirror/test/Interpreter/objc_extensions.swift
Slava Pestov 4069fa68db Sema: Lift restriction on @objc categories of concrete subclasses of generic classes
In-place initialization means the class has a symbol we can reference
from the category, so there's nothing to do on the IRGen side.

For JIT mode, we just need to realize the class metadata by calling an
accessor instead of directly referencing the symbol though.
2018-08-20 16:23:07 -07:00

58 lines
930 B
Swift

// RUN: %target-run-simple-swift %s | %FileCheck %s
// REQUIRES: executable_test
// REQUIRES: objc_interop
import Foundation
// Category on a nested class
class OuterClass {
class InnerClass: NSObject {}
}
extension OuterClass.InnerClass {
@objc static let propertyInExtension = "foo"
@objc func dynamicMethod() -> String {
return "bar"
}
}
let x = OuterClass.InnerClass()
// CHECK: foo
print(type(of: x).propertyInExtension)
// CHECK: bar
print(x.dynamicMethod())
// Category on a concrete subclass of a generic base class
class Base<T> {
let t: T
init(t: T) { self.t = t }
}
class Derived : Base<Int> {}
extension Derived {
@objc func otherMethod() -> Int {
return t
}
}
let y: AnyObject = Derived(t: 100)
// CHECK: 100
print(y.otherMethod())
extension NSObject {
@objc func sillyMethod() -> Int {
return 123
}
}
let z: AnyObject = NSObject()
// CHECK: 123
print(z.sillyMethod())