Swift 二进制运算符'~=';不能应用于两个';可选<;错误>';操作数
我有如下Swift 二进制运算符'~=';不能应用于两个';可选<;错误>';操作数,swift,Swift,我有如下ClassErrorenum,其中一个可以返回错误消息ExportError(error),另一个只返回名称。我想知道如何在开关盒中获取错误消息并将其打印出来 我得到以下错误 二进制运算符“~=”不能应用于两个“可选” 操作数 ClassError.swift enum ClassError: Error { case PathIsInvalid case ExportError(Error) } dataExport { [weak self] (data, error) i
ClassError
enum,其中一个可以返回错误消息ExportError(error)
,另一个只返回名称。我想知道如何在开关盒中获取错误消息并将其打印出来
我得到以下错误
二进制运算符“~=”不能应用于两个“可选”
操作数
ClassError.swift
enum ClassError: Error {
case PathIsInvalid
case ExportError(Error)
}
dataExport { [weak self] (data, error) in
if error != nil {
switch error as? ClassError {
case .PathIsInvalid:
print("path is not valid")
//Getting error in the following line
case .ExportError(error):
print ("Error :", error )
case .none:
print(error)
}
}
if let data = data {
self?.dataAnalysis(data)
}
}
private func dataExport(completion: @escaping([[String]]?,Error?) -> ()) {
do {
let data = try classVM.exportData()
completion(data, nil)
} catch {
completion(nil, error)
}
}
func exportData() throws -> [[String]] {
guard let filepath = Bundle.main.path(forResource: name, ofType: type )
else { throw ClassError.PathIsInvalid }
do {
return try ExcelReader().readExcel(filePath: filepath)
} catch {
throw ClassError.ExportError(error)
}
}
ClassViewController.swift
enum ClassError: Error {
case PathIsInvalid
case ExportError(Error)
}
dataExport { [weak self] (data, error) in
if error != nil {
switch error as? ClassError {
case .PathIsInvalid:
print("path is not valid")
//Getting error in the following line
case .ExportError(error):
print ("Error :", error )
case .none:
print(error)
}
}
if let data = data {
self?.dataAnalysis(data)
}
}
private func dataExport(completion: @escaping([[String]]?,Error?) -> ()) {
do {
let data = try classVM.exportData()
completion(data, nil)
} catch {
completion(nil, error)
}
}
func exportData() throws -> [[String]] {
guard let filepath = Bundle.main.path(forResource: name, ofType: type )
else { throw ClassError.PathIsInvalid }
do {
return try ExcelReader().readExcel(filePath: filepath)
} catch {
throw ClassError.ExportError(error)
}
}
ClassVM.swift
enum ClassError: Error {
case PathIsInvalid
case ExportError(Error)
}
dataExport { [weak self] (data, error) in
if error != nil {
switch error as? ClassError {
case .PathIsInvalid:
print("path is not valid")
//Getting error in the following line
case .ExportError(error):
print ("Error :", error )
case .none:
print(error)
}
}
if let data = data {
self?.dataAnalysis(data)
}
}
private func dataExport(completion: @escaping([[String]]?,Error?) -> ()) {
do {
let data = try classVM.exportData()
completion(data, nil)
} catch {
completion(nil, error)
}
}
func exportData() throws -> [[String]] {
guard let filepath = Bundle.main.path(forResource: name, ofType: type )
else { throw ClassError.PathIsInvalid }
do {
return try ExcelReader().readExcel(filePath: filepath)
} catch {
throw ClassError.ExportError(error)
}
}
这里,单词error
实际上指的是参数error
,而不是一个新变量:
case .ExportError(error):
你的意思是:
// code for illustration purposes only, not supposed to work
(error as? ClassError) == .some(.ExportError(error))
请注意,两次出现的error
指的是同一件事。这可能不是您的意思,但编译器认为这就是您的意思,并尝试使用~=
操作符将ExportError
的关联值与error
进行模式匹配,因为这里的error
被视为
但是,两个操作数的类型均为可选
。可选
上的~=
运算符要求包装
符合均衡
,但错误
不符合均衡
,因为它是一个协议。因此出现了错误消息
您可能想引入一个新的标识符,所以应该使用绑定模式,而不仅仅是表达式模式
case .ExportError(let exportError):
print("Error :", exportError)