全局变量是在任何变量之外定义的变量 函数、方法、闭包或类型上下文《The Swift programming Guide》。
所以这是一个问题:
class Dog {
var name: String?
func run(){
}
}
名称是全局变量还是属性?
@implementation Dog{
NSString *name;
- (void)run{
}
}
名称是全局变量还是属性?
由于类是一个类型,因此 name
是 Swift 示例中的属性。
在 Objective-C 示例中,name
是一个全局变量,因为属性是在@interface
范围内定义的,并且需要@property
声明。(实例变量不需要任何声明,但它们必须位于@interface
或@implementation
作用域内的块内。
name
位于类型上下文中,class Dog
,因此它是Dog
实例的属性。
第二个例子类似于 Objective-C(它绝对不是 Swift),但它是不正确的 ObjC 语法。目前尚不清楚实际代码是什么。如果您的意思是:
@implementation Dog
NSString *name;
- (void)run {
}
@end
那么name
是全局的,但永远不应该这样写。这非常令人困惑。name
声明应超出@implementation
块以避免混淆。另一方面,如果你打算写:
@implementation Dog {
NSString *name;
}
- (void)run {
}
@end
然后name
是一个私有实例变量(它与属性不同)。这是现代 ObjC 中不寻常的语法,通常应避免使用。