PluralSightのコース「Swift First Look」には期限が切れているように見えるEnumsのセクションがあります。提供されたコードはこれです:このSwift列挙型を修正するにはどうすればよいですか?
//: Playground - noun: a place where people can play
import UIKit
enum CardType: String {
case AmericanExpress = "AmericanExpress"
case Visa = "Visa"
case Discover = "Discover"
case MasterCard = "MasterCard"
case None = "None"
private func regularExpression() -> NSRegularExpression {
switch self {
case .Visa:
return NSRegularExpression(pattern: "^4[0-9]{12}(?:[0-9]{3})?$", options: nil, error: nil)
case .AmericanExpress:
return NSRegularExpression(pattern: "^4[47][0-9]{13}$", options: nil, error: nil)
case .MasterCard:
return NSRegularExpression(pattern: "^5[1-5][0-9]{14}$", options: nil, error: nil)
case .Discover:
return NSRegularExpression(pattern: "^6(?:011|5[0-9]{2})[0-9]{12}$", options:nil, error:nil)
default:
return NSRegularExpression(pattern: ".*", options:nil, error:nil)
}
}
func isValidFor(cardNumber: String) -> Bool {
let re = self.regularExpression()
let range = NSRange(0..<cardNumber.lengthOfBytes(using: String.Encoding.utf8))
let matches = re.numberOfMatches(in: cardNumber, options: .anchored, range: range)
return matches > 0
}
static let allValues = [Visa, AmericanExpress, Discover, MasterCard]
static func from(cardNumber: String) -> CardType? {
for type in self.allValues {
if type.isValidFor(cardNumber: cardNumber) {
return type
}
}
}
}
CardType.Visa.isValidFor(cardNumber: "4242424242424242")
CardType.Visa.isValidFor(cardNumber: "1234")
CardType.from(cardNumber: "4242424242424242").rawValue
これに伴う問題は、スイッチブロックでreturn文はすべてのXCodeの最新バージョンで報告されたこのエラーがあるということです。また
Type of expression is ambiguous without more context
、最後の行を
Value of optional type 'CardType?' not unwrapped; did you mean to use '!' or '?'?
ここで必要なSwiftの最新バージョンはどのように修正する必要がありますか?
注:はい、私はちょうどスウィフトから始まります。
あなたはどのバージョンのSwiftを使用していますか? Xcodeのバージョン。あなたが示したコードは、Swift言語がすばやく変化しているので、Swift 1.x用に書かれています。 Swiftの最新バージョンにはXcode 8が付属しています。最新のコースが見つからない場合は、同様の問題に長時間遭遇する必要があります。 – OOPer
最新のXCode Swiftを使用していますが、コースは2014年以降です。変更する必要があるかどうかを知る必要があります。 –
一般的に、「私のためにすべてをやる」という質問はここでは歓迎されません。このコードはSwift 1.x用に書かれたもので、最新のXcodeを使用していると言います。これはSwift 3を使用していることを意味します。今まで行ったことを示すことで、より迅速で迅速な対応ができます。 – OOPer