2

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

可以选择在没有 author : 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,消息:String,作者:GTSignature,提交者:GTSignature,父母:[AnyObject]?,updatedReferenceNamed:String?),(GTTree,消息:字符串,父母:[AnyObject]?,更新参考名称:字符串?)”

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

我如何编写这个来编译?

谢谢

4

1 回答 1

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
}

祝你好运!由于大量使用 pass-by-reference NSErrors 和偶尔的 bool,将 Objective-Git 翻译成 Swift 可能会有点奇怪,但是只要你用 do/try 包裹起来,这种特殊的方法应该很容易使用/抓住。

于 2016-01-08T19:37:51.040 回答