我在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'"
如何编写此代码进行编译?
由于
答案 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包装它,这个特殊的方法应该非常直接使用/捕获