2017-01-11 13 views
0

私は各子供のクッキーの数を計算しようとしています。 それはエラーを与える:noOfChildrenをIntegerに変換できないのはなぜですか?

error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?

let noOfCookies = 50 
var noOfChildren : String = "5" 
let typeOfCookies = "Oreo" 

print("\(typeOfCookies) can be split among \(noOfChildren) 
and each gets \(noOfCookies/Int(noOfChildren))") 

答えて

3

Int(noOfChildren)はあなたの文字列を取り、オプションのInt、またはInt?を返し、int型に変換しようとします。たとえば、noOfChildrenが「5」ではなく「fish」だった場合、Int(noOfChildren)は変換できないためnilを返します。だからあなたはオプションのInt?を持っています。任意のアンラップをいくつかの方法で処理できます。

  • アンラップする:let myInt = Int(noOfChildren)!。これはすぐにオプションを取り除きますが、noOfChildrenが「魚」だった場合は、アプリが強制終了されないためクラッシュします。
  • なし合併:let myInt = Int(noOfChildren) ?? 0。これは、それをアンラップしようとし、nilを取得すると、デフォルトで第2の値(0)になります。
  • if-statementを使用して、存在するかどうかを確認します(if let myInt = Int(noOfChildren) { ... })。 myIntはオプションではありません。

スウィフトを続行する場合は、オプションについてお読みください。彼らは大きな話題です。

+0

ありがとう。ここで除算を使用しているので、0は使用できません。代わりに、私は使用しています 'let myInt = Int(noOfChildren)?? 1' –

1

Int(String)Int?タイプを返します。オプションの型で数式を実行することはできません。これを試してみてください:

let noOfCookies = 50 
var noOfChildren : String = "5" 
let typeOfCookies = "Oreo" 

if let numChildren = Int(noOfChildren) { 
    print("\(typeOfCookies) can be split among \(noOfChildren) and each gets \(noOfCookies/numChildren)") 
} else { 
    // Handle inability to convert String to Int 
} 

私は彼の答えで@ ConnorNevilleの説明が好きです。私はこれがあなたが文字列からIntへの変換を実行できないかどうかを知りたがっているので、これが彼がリストした3つの最良のアプローチだと思う。

+0

ありがとうございます。これも機能します。 –

関連する問題