在尝试使用CocoaPods设置SwiftAddressBook时,编译会给我以下错误:
调用参数类型与函数签名不匹配! %V16SwiftAddressBook15MultivalueEntry.87 *%0 %V16SwiftAddressBook15MultivalueEntry.85 *尾调用void @ _TFFC16SwiftAddressBook22SwiftAddressBookPersonP33_ECEF355CFD253D8039C191CB27BDAECD24convertMultivalueEntriesFS0_U_Ss9AnyObject__FTGSqGSaGVS_15MultivalueEntryQ ____ ____ 9converterFQ_Q0__GSqGSaGS2_Q0 __ U_FGS2_Q__GS2_Q0(%V16SwiftAddressBook15MultivalueEntry.87 * noalias sret%0,%V16SwiftAddressBook15MultivalueEntry.86 * noalias%3, i8 *%。fn.load,%swift.refcounted *%6,%swift.type *%8,%swift.type * %10),!dbg!8665 LLVM错误:找到破碎的功能,编译 中止!
似乎在抱怨以下method:
private func convertMultivalueEntries<T,U : AnyObject>(multivalue : Array<MultivalueEntry<T>>?, converter : (T) -> U) -> Array<MultivalueEntry<U>>? {
return multivalue?.map { m -> MultivalueEntry<U> in
return MultivalueEntry(value: converter(m.value), label: m.label, id: m.id)
}
}
如果我放弃CocoaPods安装,只是将源代码复制到我的主项目中,它编译得很好。
有没有办法可以简化这个方法调用,以便LLVM编译器不会阻塞它?或者我是否错误地设置了CocoaPod?
答案 0 :(得分:0)
我可以通过删除map()
的使用来安抚LLVM编译器,并显式地键入返回数组:
private func convertMultivalueEntries<T,U: AnyObject>(multivalue : [MultivalueEntry<T>]?, converter : (T) -> U) -> [MultivalueEntry<U>]? {
var result: [MultivalueEntry<U>]?
if let multivalue = multivalue {
result = []
for m in multivalue {
var convertedValue = converter(m.value)
var converted = MultivalueEntry(value: convertedValue, label: m.label, id: m.id)
result?.append(converted)
}
}
return result
}
答案 1 :(得分:0)
确实,这是关于优化水平。如果没有优化,Swift就没用了,但是在关闭优化的情况下,这个问题就消失了。编译器中有一个明显的错误!