Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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 在Swift中使用Obj-C类扩展?_Objective C_Swift_Bridging Header - Fatal编程技术网

Objective c 在Swift中使用Obj-C类扩展?

Objective c 在Swift中使用Obj-C类扩展?,objective-c,swift,bridging-header,Objective C,Swift,Bridging Header,我使用Xcode的addfiles…向我的Swift项目添加了一些Obj-C代码(非常好),但它没有问我是否要制作桥接头。因此,我自己在Obj-C代码组中制作了一个,将其编辑为所需的单个头,并确保该文件在Swift编译器的构建设置中被引用。然后我查看了Obj-C代码,确保.m文件在目标中-它们在目标中,并且在编译源代码中列出 相关标题包含以下内容: @interface NSNumber (Expression) + (NSNumber *)numberByParsingExpression:(

我使用Xcode的
addfiles…
向我的Swift项目添加了一些Obj-C代码(非常好),但它没有问我是否要制作桥接头。因此,我自己在Obj-C代码组中制作了一个,将其编辑为所需的单个头,并确保该文件在Swift编译器的构建设置中被引用。然后我查看了Obj-C代码,确保.m文件在目标中-它们在目标中,并且在编译源代码中列出

相关标题包含以下内容:

@interface NSNumber (Expression)
+ (NSNumber *)numberByParsingExpression:(NSString *)expression;
+ (NSNumber *)numberByParsingExpression:(NSString *)expression withVariables:(NSDictionary *)varDictionary;
@end
现在,我尝试使用与以下相同的基本语法调用此代码:

以及主题上的几个变体。但它不会编译,“类型'NSNumber'没有成员'numberByParsingExpression'”

我在这里漏了一步吗?

根据

您可以通过选择File>New> 文件>(iOS、watchOS、tvOS或OSX)>源>头文件

您需要编辑桥接头文件以公开您的 目标-C代码到您的Swift代码。 在Objective-C桥接头文件中,导入每个Objective-C 要向Swift公开的标题。例如:

在生成设置中,在Swift编译器代码生成中,确保 下的Objective-C桥接标头生成设置具有指向 桥接头文件。路径应该是相对于您的项目的, 类似于在生成中指定Info.plist路径的方式 设置。在大多数情况下,您不需要修改此设置。 此桥接头文件中列出的任何公共Objective-C头 将对斯威夫特可见。Objective-C功能将是 在该目标内的任何Swift文件中自动提供,无需 任何导入语句。将自定义Objective-C代码与相同的 系统类使用的Swift语法

如果您已经正确地执行了此操作,但仍然无法正常工作,请尝试删除项目派生数据,并清理生成项目。

根据

您可以通过选择File>New> 文件>(iOS、watchOS、tvOS或OSX)>源>头文件

您需要编辑桥接头文件以公开您的 目标-C代码到您的Swift代码。 在Objective-C桥接头文件中,导入每个Objective-C 要向Swift公开的标题。例如:

在生成设置中,在Swift编译器代码生成中,确保 下的Objective-C桥接标头生成设置具有指向 桥接头文件。路径应该是相对于您的项目的, 类似于在生成中指定Info.plist路径的方式 设置。在大多数情况下,您不需要修改此设置。 此桥接头文件中列出的任何公共Objective-C头 将对斯威夫特可见。Objective-C功能将是 在该目标内的任何Swift文件中自动提供,无需 任何导入语句。将自定义Objective-C代码与相同的 系统类使用的Swift语法


如果您已经正确地执行了此操作,但仍然无法正常工作,请尝试删除项目派生数据,并清理生成项目。

好的,这是一个Xcode错误

在组中创建头文件时,实际上会将其物理地放置在源文件夹中。因此,在我的例子中,头是在/project/subproject/.h中创建的,尽管它在Xcode中显示为基本文件夹/project/.h的一部分


所以实际上有两个标题,一个在正确的位置,里面什么都没有,另一个在错误的位置,那就是Xcode中正在编辑的那个。因此,您必须查看文件检查器,以确保它将桥接头放置在正确的位置

好的,这是一个Xcode的小漏洞

在组中创建头文件时,实际上会将其物理地放置在源文件夹中。因此,在我的例子中,头是在/project/subproject/.h中创建的,尽管它在Xcode中显示为基本文件夹/project/.h的一部分


所以实际上有两个标题,一个在正确的位置,里面什么都没有,另一个在错误的位置,那就是Xcode中正在编辑的那个。因此,您必须查看文件检查器,以确保它将桥接头放置在正确的位置

这回答了你的问题吗?这回答了你的问题吗?
let result = NSNumber.numberByParsingExpression(f.1)