我有一个来自我的Obj-C pod的自动生成的swift类,如下所示:
typealias BlockDomainMapperMappingBlock = (AnyObject!) -> AnyObject!
class BlockDomainMapper : DomainMapper {
var mappingBlock: BlockDomainMapperMappingBlock! { get }
/*not inherited*/ init!(block: BlockDomainMapperMappingBlock!)
}
尝试初始化对象时:
let domainMapper = BlockDomainMapper { (objectToMap : AnyObject!) -> AnyObject! in
return LoginCredentials(token: objectToMap)
}
我收到以下错误:
无法找到接受的“BlockDomainMapper”类型的初始值设定项 一个类型'((AnyObject!) - > AnyObject!)'
的参数列表
这令我感到困惑,因为我在X-Code中使用自动完成来生成大部分代码((objectToMap:AnyObject!),它以AnyObject!占位符开头。)
编辑:这是生成swift类的Objective-C代码:
typedef id (^BlockDomainMapperMappingBlock)(id dataToMap);
@interface BlockDomainMapper : GLTDomainMapper
@property (nonatomic, readonly, copy) BlockDomainMapperMappingBlock mappingBlock;
+ (BlockDomainMapper *)mapperWithBlock:(BlockDomainMapperMappingBlock)block;
@end
编辑2:哇!在再次查看Obj-c代码之后,我认为它会破坏mapperWithBlock转换,或者我使用错误的语法来调用那种类方法。
答案 0 :(得分:0)
尝试:
let domainMapper = BlockDomainMapper() { (objectToMap : AnyObject!)
(即在BlockDomainManager()之后包括()
答案 1 :(得分:0)
在我看来,你从一个"类工厂开始的Objective-C代码"方便方法[Type1 Vol1] = blood_type(1, 'Ann');
[Type2 Vol2] = blood_type(2, 'Ben');
[Type3 Vol3] = blood_type(3, 'Chris');
[Type4 Vol4] = blood_type(4, 'David');
用于创建mapperWithBlock:
个对象。这与初始化程序不同。它使用初始化程序。
您的初始化程序相当于Objective-C调用BlockDomainMapper
如果要调用初始化程序,则需要添加参数标签:
+initWithBlock:
应该工作。
(我还在学习Swift的细节,所以我并非100%肯定,但我认为这是你需要做的。)
答案 2 :(得分:0)
我现在知道自己做错了什么。这里有一些有效的代码。
let domainMapper = BlockDomainMapper { (objectToMap : AnyObject!) -> AnyObject! in
return LoginCredentials(token: objectToMap as! String)
}