The following compiles without error:
class A: NSObject {
let a = self
}
but only if A inherits from NSObject. According to Xcode, the type of a is (A) -> () -> A.
Is this a known bug?
The following compiles without error:
class A: NSObject {
let a = self
}
but only if A inherits from NSObject. According to Xcode, the type of a is (A) -> () -> A.
Is this a known bug?
Looks like self here is the identity method -[NSObject self], which is definitely surprising, but technically not a bug, I would say. (This is why you only see this when inheriting from NSObject — normally there isn’t a named self.self method.)
Although you do often have this nice self chain available:
class A {
init() {
print(self.self.self.self)
}
}
A()
So it's a closure, but is (A) -> () -> A the correct type for it?
For that matter, why isn't self interpreted as a keyword here? After all, this:
class A: NSObject {
let a = class
}
won't compile, but this:
class A: NSObject {
let a = `class`
}
does refer to the -[NSObject class] method.
Oh well, perhaps it's better not to ask.
I suspect this: [Parse] Enable self rebinding (to self) by dduan · Pull Request #15306 · apple/swift · GitHub
I'd agree that does seem to be a bug: naked self should require backticks if it's being parsed as a reference to a member.