Swift with objective-git:重载' createCommitWithTree'存在这些部分匹配的参数列表

时间:2015-10-10 16:01:14

标签: swift objective-git

我在Swift中使用objective-git,无法编译GTRepository.createCommitWithTree方法。

可以选择在没有作者的情况下调用该方法:GTSignature和committer:GTSignature参数。

我是Swift新手并重载功能。我想知道如何构建它以便编译。

我的代码使用了objective-git方法中指定的所有类型:

func commitTree ( tree : GTTree ) {

    let message : NSString
    let author : GTSignature
    let committer : GTSignature
    let parents : NSArray
    let updatingReferenceNamed : NSString
    var error : NSError?

    GTRepository.createCommitWithTree( tree, message, author, committer, parents, updatingReferenceNamed, &error )
}

在此代码中,编译器无法使用这些类型的参数列表调用方法。编译器提供了其他信息: "重载' createCommitWithTree'存在这些部分匹配的参数列表:(GTTree,message:String,作者:GTSignature,committer:GTSignature,parents:[AnyObject] ?, updatingReferenceNamed:String?),(GTTree,message:String,parents:[AnyObject] ?, updatesReferenceNamed:String?)"

如果我重构使用上面建议的类型,编译器就不会使用"对成员的模糊引用' createCommitWithTree'"

如何编写此代码进行编译?

由于

1 个答案:

答案 0 :(得分:0)

不确定您是否仍然遇到此问题(在搜索其他内容时遇到了这个尚未解决的问题),但是您的代码可能存在几个问题。首先,您不会通过引用传递NSError(假设您使用的是Swift 2)。此外,此方法是GTRepository的实例方法,而不是类方法,因此您必须在repo的实例上调用它。以下是这种方法转换为Swift的方式:

// These all need to be defined somewhere earlier for the following code to function
let repo: GTRespository
let tree: GTTree
let commitMsg: String
let parentCommit: GTCommit?
let refName: String?

// And here's the actual code you would execute
var createdCommit: GTCommit?
do {
    try createdCommit = repo.createCommitWithTree(tree, message: commitMsg, parents: parentCommit?, updatingReferenceNamed: refName?)
} catch let error as NSError {
    NSLog("Error creating commit: \(error.domain)")
}
if createdCommit != nil {
    // Do something with your new commit
}
祝你好运!将Objective-Git翻译成Swift会因为大量使用pass-by-reference NSErrors和偶尔的bool而变得有些奇怪,但只要你用do / try包装它,这个特殊的方法应该非常直接使用/捕获