当前位置: 首页 > 面试题库 >

目标c中的Swift全局变量和全局函数

鱼旺
2023-03-14
问题内容

该文件说:

Swift编译器会自动将C和Objective-C源文件中定义的全局常量作为Swift全局常量导入。

但这并没有说相反的话。我需要定义一个全局swift常数,并且能够像全局c常数一样客观地看到它。如快速定义:

public let CARDS = ["card1", "card2"]

并在物镜c端使用它,例如

NSLog(@"Cards count: %d", [CARDS count])

我该怎么办?我已经导入了迅速自动生成的标题,例如:

#import "MyProject-Swift.h"

在Xcode中,如果我command-click使用它,它将带我到swift代码中的正确位置,但是在编译时,我得到:

'User of undeclared Identifier CARDS'

从我的客观角度来看。


问题答案:

这是关于它的文件

您可以访问标有@objc属性的类或协议中的任何内容,只要它们与Objective-C兼容即可。这不包括仅Swift的功能,例如此处列出的功能:

  • 泛型
  • 元组
  • 在Swift中定义的枚举
  • Swift中定义的结构
  • Swift中定义的顶级函数
  • Swift中定义的全局变量
  • Swift中定义的Typealiases
  • 斯威夫特风格的变数
  • 嵌套类型
  • 咖喱函数

不能从Objective-C访问全局变量(包括常量)。

相反,您必须声明一个具有全局常量访问器的类。

// Swift
public let CARDS = ["card1", "card2"]

@objc class AppConstant {
   private init() {}
   class func cards() -> [String] { return CARDS }
}

// Objective-C
NSArray *cards = [AppConstant cards];


 类似资料:
  • 主要内容:局部变量,全局变量,局部变量和全局变量的综合示例在《 C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。 所谓 作用域( Scope ) ,就是变量的有效范围。 不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。 局部变量 定义在函数内部的变量称为 局部变量(Local Variable) ,

  • 问题内容: 我知道我应该避免由于这样的混乱而首先使用全局变量,但是如果我要使用它们,以下是使用它们的有效方法吗?(我正在尝试调用在单独函数中创建的变量的全局副本。) 第二个函数使用的是否具有与使用和修改的的全局副本相同的值?定义后调用函数时,顺序重要吗? 问题答案: 如果你只想访问全局变量,则只需使用其名称即可。但是,要更改其值,你需要使用global关键字。 例如 这会将全局变量的值更改为55。

  • 我知道由于这样的混淆,我应该首先避免使用全局变量,但是如果我要使用它们,以下是使用它们的有效方法吗?(我正在尝试调用在单独的函数中创建的变量的全局副本。) 第二个函数使用的是否与使用和修改的的全局副本具有相同的值?定义后调用函数时,顺序重要吗?

  • 问题内容: 我正在尝试使用exec运行一段python代码。 这导致以下输出 但是,如果我将代码更改为此- 然后工作正常-提供以下输出- 显然,A存在并且可以访问-在第一段代码中出了什么问题?我正在使用2.6.5,欢呼声, 科林 更新1 如果我检查类中的locals()- 然后很明显,locals()在两个地方都不相同- 但是,如果我这样做,就没有问题- 更新2 好的,所以这里的文档-http:

  • 本文向大家介绍Lua中的全局变量、非全局变量总结,包括了Lua中的全局变量、非全局变量总结的使用技巧和注意事项,需要的朋友参考一下 前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”。这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现;另一个优点是,可以像其他table一样操作这个table。为了便于实施这种操作,L