LLVM错误:调用参数类型与函数签名不匹配

时间:2015-02-13 01:13:45

标签: ios swift cocoapods

在尝试使用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?

2 个答案:

答案 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就没用了,但是在关闭优化的情况下,这个问题就消失了。编译器中有一个明显的错误!