在 swift 中,它是一个全局变量还是属性



全局变量是在任何变量之外定义的变量 函数、方法、闭包或类型上下文《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 中不寻常的语法,通常应避免使用。

相关内容

  • 没有找到相关文章

最新更新