2016-01-27 2 views
0

Глобальные переменные являются переменными, которые определены вне какой-либо функции, метода, закрытия или контекста типа "Свифт Руководство по программированию"В быстром, глобальная переменная или свойство?

Так что это вопрос..

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]; } статические инструменты * _instance; static dispatch_once_t onceToken; dispatch_once (& onceToken,^{ _instance = [super allocWithZone: зона]; }); return _instance; } @ end'''' Is ** Статические инструменты * _instance ** глобальный? – user5430804

Смежные вопросы