2017-06-02 77 views
2

如果Enum类型在新的操作系统版本中添加新case,如何在switch声明查询? 像StoreKit一个Enum低于空房情况

public enum Code : Int { 
    public typealias _ErrorType = SKError 
    case unknown 
    case clientInvalid 
    case paymentCancelled 
    case paymentInvalid 
    case paymentNotAllowed 
    case storeProductNotAvailable 
    @available(iOS 9.3, *) 
    case cloudServicePermissionDenied 
    @available(iOS 9.3, *) 
    case cloudServiceNetworkConnectionFailed 
    @available(iOS 10.3, *) 
    case cloudServiceRevoked 
} 

是下面的代码是唯一的解决办法?这太冗余了。

if #available(iOS 10.3, *) { 
    switch code { 
     //all cases available in 10.3 
     ... 
    } 
} else if #available(iOS 9.3, *) { 
    switch code { 
     //all cases available in 9.3 
     ... 
    } 
} else { 
    switch code { 
     //all cases available below 9.3 
     ... 
    } 
} 

----------------- new -------------------------

我想这不是问题。所有在一个switch中编写的例子都没有问题,if语句是不必要的。因为新的附加案例不会在低iOS版本中调用。

回答

0

我想你可以这样做:

switch transactionCode { 
    case SKError.unknown: 
     //Handle case 
    //(rest of ios < 9.3 available types) 
    default: 
     if #available(iOS 9.3, *) { 
      if transactionCode == SKError.cloudServiceNetworkConnectionFailed { 
       //Handle case 
      } 
      else if transactionCode == SKError.cloudServicePermissionDenied { 
       //Handle case 
      } 
     } 
     if #available(iOS 10.3, *) { 
      if transactionCode == SKError.cloudServiceRevoked { 
       //Handle case 
      } 
     } 
    } 

您将无法在不做出默认情况下的详尽switch语句,但世界上没有多余的代码。

0

这个怎么样?

if error.code == SKError.unknown { 

} else if error.code == SKError.clientInvalid { 

} else if error.code == SKError.paymentCancelled { 

} else if error.code == SKError.paymentInvalid { 

} else if error.code == SKError.paymentNotAllowed { 

} else if error.code == SKError.storeProductNotAvailable { 

} else if #available(iOS 9.3, *), error.code == SKError.cloudServicePermissionDenied { 

} else if #available(iOS 9.3, *), error.code == SKError.cloudServiceNetworkConnectionFailed { 

} else if #available(iOS 10.3, *), error.code == SKError.cloudServiceRevoked { 

}