2016-01-27 69 views
0

全局變量是任何 函數,方法,封閉件,或類型上下文之外定義的變量「的夫特編程指南」在swift中,它是一個全局變量還是屬性?

因此,這是一個問題:。

class Dog { 
    var name: String? 
    func run(){ 

    } 
} 

name是一個全局變量還是屬性?

@implementation Dog{ 

NSString *name; 
- (void)run{ 

    } 
} 

name是一個全局變量還是屬性?

回答

2

由於類是一種類型,name是Swift示例中的一個屬性。

在Objective-C示例中,name是一個全局變量,因爲屬性在@interface範圍內定義,並且需要@property聲明。 (實例變量不需要任何聲明,但他們必須是@interface@implementation範圍內的塊內。)

+0

非常感謝,@ Jesper – user5430804

1

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中是一種不尋常的語法,通常應該避免。

+0

**感謝**,你說得對,第二個例子是Objective-C。我犯了一個錯誤。 '''@implementation ClassA {(instancetype)shareTools { return [[self alloc] init]; } static Tools * _instance; static dispatch_once_t onceToken; dispatch_once(&onceToken,^ {Instance = [super allocWithZone:zone]; }); return _instance; } @ end'''' 是** static Tools * _instance **是全局的嗎? – user5430804

相關問題