2017-06-02 7 views
2

Enumタイプはswitch文で状況を確認するにはどのように、新しいOSバージョンで新しいcaseを追加する場合は?空き状況を確認する

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 
} 

以下StoreKitEnum同様 はコードの下に唯一のソリューションですか?あまりにも冗長です。

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 
     ... 
    } 
} 

-----------------新しい-------------------------

私はそれが質問ではないと思います。 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文を作ることができないが、冗長なコードをtheresの。

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 { 

} 
関連する問題