Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 二进制运算符'~=';不能应用于两个';可选<;错误>';操作数_Swift - Fatal编程技术网

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)