我有一个swift方法,它接收一个struct作为参数。
由于结构没有桥接到objective-c,因此该方法在桥接头中是不可见的
我被迫创建了一个新的“相同”方法,它接收“AnyObject
”而不是原始方法所需的结构。
现在我的任务是从“AnyObject
”实例化swift结构。
在这种情况下,是否可以将“AnyObject
”“转换”为快速结构?
我是否被迫编写样板来构建来自AnyObject
的快速结构?
我可以发送一个代表结构键值对的NSDictionary
。这有什么用?
例如:
斯威夫特
struct Properties {
var color = UIColor.redColor()
var text = "Some text"
}
class SomeClass : UIViewController {
func configure(options : Properties) {
// the original method
// not visible from
}
func wrapObjC_Configure(options : AnyObject) {
// Visible to objective-c
var convertedStruct = (options as Properties) // cast to the swift struct
self.configure(convertedStruct)
}
}
目标-C
SomeClass *obj = [SomeClass new]
[obj wrapObjC_Configure:@{@"color" : [UIColor redColor],@"text" : @"Some text"}]
答案 0 :(得分:1)
您可以使用NSValue
并在其中包含您的结构,发送NSValue然后从中获取结构值,
NSValue的样本类别为:
@interface NSValue (Properties)
+ (instancetype)valuewithProperties:(Properties)value;
@property (readonly) Properties propertiesValue;
@end
@implementation NSValue (Properties)
+ (instancetype)valuewithProperties:(Properties)value
{
return [self valueWithBytes:&value objCType:@encode(Properties)];
}
- (Properties) propertiesValue
{
Properties value;
[self getValue:&value];
return value;
}
@end
有关NSValue的更多信息,请访问https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSValue_Class/
答案 1 :(得分:0)
您不能使用anyObject来表示结构。您只能将AnyObject与类实例一起使用。
您可以尝试使用Any,这可以代表任何类型的实例,包括函数类型。