首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标c中的Swift全球和全球功能

目标c中的Swift全球和全球功能
EN

Stack Overflow用户
提问于 2014-10-20 10:29:48
回答 3查看 13.6K关注 0票数 36

文件上说:

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

但它并没有说明相反的情况。我需要定义一个全局快速常数,并且能够看到它的一个目标c边,就像一个全局c常数。就像快速的定义:

代码语言:javascript
复制
public let CARDS = ["card1", "card2"]

并在目标c端使用它,如

代码语言:javascript
复制
NSLog(@"Cards count: %d", [CARDS count])

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

代码语言:javascript
复制
#import "MyProject-Swift.h"

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

代码语言:javascript
复制
'User of undeclared Identifier CARDS'

在我的目标C方面。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-20 11:14:27

关于它的Here is the document

只要与Objective兼容,就可以访问使用@objc属性标记的类或协议中的任何内容。这不包括Swift特有的功能,如此处列出的特性:

  • 仿制药
  • 元组
  • Swift中定义的枚举
  • Swift中定义的结构
  • Swift中定义的顶级函数
  • Swift中定义的全局变量
  • Swift定义的Typealiases
  • 斯威夫特式变装
  • 嵌套类型
  • 咖喱函数

从目标C中无法访问全局变量(包括常量)。

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

代码语言:javascript
复制
// Swift
public let CARDS = ["card1", "card2"]

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

// Objective-C
NSArray *cards = [AppConstant cards];
票数 47
EN

Stack Overflow用户

发布于 2018-12-11 18:21:48

@rintaro的回答不错,但是对于Swift和Objective中都可以使用的常量,另一个简单的Swift答案是:

代码语言:javascript
复制
@objcMembers
class MyConstants: NSObject {
    static let kMyConstant1 = "ConstantValue1";
    static let kMyConstant2 = "ConstantValue2";
    static let CARDS = ["card1", "card2"]
}

您可以通过以下方式访问Swift和Objective:

代码语言:javascript
复制
MyConstants.kMyConstant1 // this will return "ConstantValue1"
MyConstants.CARDS // this will return array ["card1", "card2"]
票数 7
EN

Stack Overflow用户

发布于 2020-12-17 14:26:24

迅速的全球功能(如:快速顶层函数)不能被objC访问.句号。故事到此结束。

见上面rintaro的回答,也就是.

这不包括Swift中仅包含Swift的功能,如此处列出的功能:.Swift中定义的顶级函数

轰隆

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26463487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档