如何使用自定义Swift类声明Objective-C方法
我想声明一个Objective-C方法,其中一个参数是自定义Swift类,如下所示:如何使用自定义Swift类声明Objective-C方法,swift,objective-c,mix-and-match,Swift,Objective C,Mix And Match,我想声明一个Objective-C方法,其中一个参数是自定义Swift类,如下所示: + (void)doCalculationsWithACustomSwiftObject:(CustomSwiftClass *)swiftObject andADictionanary:(NSDictionary *)ordinaryDictionary; 其目的是从Swift调用此方法,传递自定义类“CustomSwiftClass.Swift”的实例,以便Objective-C代码可以访问其属性。有可能
+ (void)doCalculationsWithACustomSwiftObject:(CustomSwiftClass *)swiftObject andADictionanary:(NSDictionary *)ordinaryDictionary;
其目的是从Swift调用此方法,传递自定义类“CustomSwiftClass.Swift”的实例,以便Objective-C代码可以访问其属性。有可能吗?如果有,我如何声明“CustomSwiftClass”以使编译器接受它?一些想法:
“-Swift.h”
。(稍后,您将在中了解有关产品模块名称的更多信息。)
例如,您的Objective-C文件将导入此生成的标头:
#import "MyApp-Swift.h"
有关更多信息,请参阅使用中的将Swift导入Objective-C部分xxx Swift.h
文件,请仔细检查您的目标设置:
(注意,我在设置中搜索了“swift”以缩小结果范围。)
如您所见,以下各项均已设置:
- “安装Objective-C兼容头”设置为“是”
- 设置“Objective-C生成的接口头名称”(并匹配我导入到Objective-C代码中的名称)
- 还规定了“Objective-C桥接头” 注意,Objective-C桥接头表面上只是为了使Objective-C类可用于Swift代码(您目前正试图实现相反的目的),但我注意到这也会影响兼容性头中生成的代码。因此,请确保您也有一个桥接头
NSObject
子类化的:
import UIKit
class MyObject: NSObject {
var text: String?
var value: Int = 0
}
Int?
等可选类型将不起作用,而String?
等可选类类型将起作用)。因此,如果您看到的是类,但不是某些属性,请确保它们与Objective-C兼容
但是我从你的问题中得出结论,你有更基本的问题,你根本找不到-Swift.h
标题。但一旦你解决了这个问题,这是对单个属性的考虑在Swift类前面添加
@objc
declaration@SteveWilford已经尝试过了,但编译器仍然不接受该类。导入/包含/类声明在Objective-C头文件中应该是什么样子?你的意思是什么?@turingtested有一个用于Swift/Objective-C混合和匹配的桥接头标记(不幸的是,该标记还没有描述)。我同意我们可以有更有用的东西。我已经做了所有这些。你的回答很好地介绍了Swift和Objective-C的混合搭配。但这并不能解决我的问题,也许你误解了这个问题。当然,我使用的是Objective-C桥接头,因为我是从Swift调用这个方法的。我刚才注意到,#import“MyApp Swift.h”
在.m文件中运行良好!但这不是问题所在,问题在于如何用自定义Swift类作为参数声明方法。然后必须在.h文件中进行导入,这会导致错误。至少对我来说。@turingtested-如果你有一个Objective-C函数,它以“swift object”作为参数,你只需(a)#在.m
文件中导入“MyApp swift.h”
(或者如果这个方法是在Objective-C类的公共界面中定义的,那么在.h
文件中导入),然后(b)如问题所示准确地声明函数。如果它不识别CustomSwiftClass
,那么我会打开MyApp Swift.h
文件(也就是说,只需按一下命令),并确保您看到在那里定义的自定义类。你可能看不到它,因为我上面列举的众多原因中的任何一个。