我已经创建了一个自定义Xcode编辑器扩展,如果没有满足某些条件,它可能无法运行。
具体来说,它是一个排序行命令,如果有多个选择,或者如果选择的行少于两行,它将拒绝运行。
我定义了一个符合错误的枚举,以定义同样符合LocalizedError的错误。
enum CommandError: Error, LocalizedError
{
case notEnoughLines
case tooManySelections
public var errorDescription: String?
{
switch self
{
case .notEnoughLines: return NSLocalizedString("Not enough lines to sort", comment: "notEnoughLines")
case .tooManySelections: return NSLocalizedString("Too many selections", comment: "tooManySelections")
}
}
}在我的执行( with :completionHandler:)方法中,我使用适当的错误之一调用完成处理程序:
...
if invocation.buffer.selections.count > 1
{
completionHandler(CommandError.tooManySelections)
return
}
...我期待文本的错误(“太多的选择”)将被显示。相反,错误显示为:
手术无法完成。(Ext01.SortLinesCommand.CommandError错误1.)
我是做错了,还是在XcodeKit或Xcode中出现了问题?
发布于 2018-01-11 00:25:33
我在我的linkedIn配置文件上为Xcode扩展创建了一篇文章。这里的问题是错误是协议,而NSError是对象。不能将错误协议传递给完成处理程序,但必须在其中传递NSError实例。以前也有点困惑。
如果您像这样创建NSError实例
var userInfo: [AnyHashable : Any] = [
NSLocalizedDescriptionKey : NSLocalizedString(
"Finally! This works!",
value: "Finally! This works!",
comment: ""
),
NSLocalizedFailureReasonErrorKey : NSLocalizedString(
"Finally! This works!",
value: "Finally! This works!",
comment: ""
)
]
let error = NSError(
domain: "",
code: 666,
userInfo: userInfo
)
// And pass it to completion like this, it will work
completionHandler(error)要进一步了解这个问题,请看我的文章:
https://www.linkedin.com/pulse/xcode-extension-defining-enum-variables-swift-moreerror-bucher/
如果您对错误感到好奇,那么本文中的Cmd+f关键字如下:
I haven't seen any extension with passing error
https://stackoverflow.com/questions/45701377
复制相似问题