Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使Objective C变量在方法外部可访问,同时允许仍然调用方法来更新值_Objective C - Fatal编程技术网

Objective c 使Objective C变量在方法外部可访问,同时允许仍然调用方法来更新值

Objective c 使Objective C变量在方法外部可访问,同时允许仍然调用方法来更新值,objective-c,Objective C,更新:来自接受的答案: 因为此变量的名称MyFirstVar与实例相同 在类中声明,它将隐藏实例变量,您有两个 不同的变量 这对我来说很有意义,所以我把它放在最上面,以防它与其他人有关 原创帖子: 显然,这是行不通的: @interface MyDelegate: NSObject <NSApplicationDelegate> { NSString * const MyFirstVar; NSString * const MySecondVar;

更新:来自接受的答案:

因为此变量的名称MyFirstVar与实例相同 在类中声明,它将隐藏实例变量,您有两个 不同的变量

这对我来说很有意义,所以我把它放在最上面,以防它与其他人有关


原创帖子:

显然,这是行不通的:

@interface MyDelegate: NSObject <NSApplicationDelegate>
    {
        NSString * const MyFirstVar;
        NSString * const MySecondVar;
    }


-(void)setSomeVars;

@end

@implementation MyDelegate

    - (void)setSomeVars
    {
        NSString * const MyFirstVar = @"First Var";
        NSString * const MySecondVar = @"Second Var";
        NSLog(@"%@,%@",MyFirstVar,MySecondVar);  //  <--- This logs "First Var,Second Var" 
    }

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    [self setSomeVars];
    NSLog(@"%@,%@",MyFirstVar,MySecondVar);     //   <--- This logs "(null),(null)"

}

@end
…然后它根据需要工作,并在
setSomeVars
方法内部和外部记录“第一个Var,第二个Var”

我在这里的目标是,作为一个学习练习(我并不真正想要应用程序范围的变量),能够引用变量的最新值;无论何时何地,都可以通过调用
setSomeVars

问题

如何使这些变量可以从整个应用程序中的任何代码块访问,而无需调用
setSomeVars
,以将其计算到本地范围?

编写时:

NSString * const MyFirstVar = @"First Var";
setSomeVars
内部,您正在创建一个新的局部变量,该变量将一直持续到调用
setSomeVars
完成为止。由于此变量的名称
MyFirstVar
与类中声明的实例相同,因此它隐藏了实例变量,并且您有两个不同的变量

只需将语句更改为:

MyFirstVar = @"First Var";
您可以访问现有的实例变量,没有两个变量,没有隐藏

限定符
\u块
与块相关,不应在此处使用

其他几点:

  • 不再建议在
    @接口
    中声明实例变量。移动声明及其括号,
    {
    &
    },以立即跟随
    @implementation`。这会将变量隐藏在类之外,从而改进封装,这有利于程序结构、正确性和维护
  • 按照惯例,变量和方法名以小写字母开头,类名以大写字母开头。变量使用大写,这就是语法着色错误的原因
HTH

当你写:

NSString * const MyFirstVar = @"First Var";
setSomeVars
内部,您正在创建一个新的局部变量,该变量将一直持续到调用
setSomeVars
完成为止。由于此变量的名称
MyFirstVar
与类中声明的实例相同,因此它隐藏了实例变量,并且您有两个不同的变量

只需将语句更改为:

MyFirstVar = @"First Var";
您可以访问现有的实例变量,没有两个变量,没有隐藏

限定符
\u块
与块相关,不应在此处使用

其他几点:

  • 不再建议在
    @接口
    中声明实例变量。移动声明及其括号,
    {
    &
    },以立即跟随
    @implementation`。这会将变量隐藏在类之外,从而改进封装,这有利于程序结构、正确性和维护
  • 按照惯例,变量和方法名以小写字母开头,类名以大写字母开头。变量使用大写,这就是语法着色错误的原因

HTH

FWIW,这方面的技术术语是“隐藏”,而不是“隐藏”@jtbandes谢谢。为了充分理解,我可以问一下吗?xcode对
“本地声明'myVar'隐藏实例变量”
“声明隐藏全局范围内的变量”有单独的警告
-术语“阴影”是否适用于实例变量本身,或者使用它来指变量的重新声明是否会改变其范围?这两条消息都由
-Wshadow
警告标志启用。它们只是描述了稍微不同的情况(全局变量与实例变量)。这两种情况都涉及到隐藏。术语“隐藏”和“隐藏”用于指一种情况,即一个范围中的一个声明靠近/与引用点相同,阻止直接访问范围之外/更远的声明。而有些则对术语进行了区分;e、 例如,在涉及继承时使用隐藏(子类中的声明将一个隐藏在超类中),在其他情况下使用隐藏(例如局部/实例、局部/全局、内部局部/外部局部);其他人更灵活地/互换地使用这些术语。FWIW,这方面的技术术语是“隐藏”,而不是“隐藏”@jtbandes谢谢。为了充分理解,我可以问一下吗?xcode对
“本地声明'myVar'隐藏实例变量”
“声明隐藏全局范围内的变量”有单独的警告
-术语“阴影”是否适用于实例变量本身,或者使用它来指变量的重新声明是否会改变其范围?这两条消息都由
-Wshadow
警告标志启用。它们只是描述了稍微不同的情况(全局变量与实例变量)。这两种情况都涉及到隐藏。术语“隐藏”和“隐藏”用于指一种情况,即一个范围中的一个声明靠近/与引用点相同,阻止直接访问范围之外/更远的声明。而有些则对术语进行了区分;e、 g.在涉及继承时使用隐藏(子类中的声明将一个隐藏在超类中),并使用shad