2017-03-07 10 views
0

Int16型の 'zip'属性を持つCoreDataエンティティアドレスを宣言しました。Swift CoreData - 'Int16'の型に 'Int'型の値を割り当てることができません

問題は、私はその属性に整数を割り当てるとき、次のとおりです。

address?.zip = Int(zipField.text!) 

私はInt16型を入力するint型の値を割り当てることができませんというエラーを取得します。意味をなさない(私は思う)。

let zip:Int? = Int(zipField.text!) 
if zip != nil { 
    let zip16 = Int16(zip!) 
} 

それは私がXCodeのがクラッシュし、整数に変換、その行だ:私はInt16型にINT、XCodeのは、まだ私に吹くことをキャストしようとすると、

問題は、あります。私は実際にエラーメッセージの情報を見ていないので、何を試していいのか分かりません。

一般に、これらの携帯電話のオペレーティングシステムのためにInt64を使用する必要がありますか?

を使用でき
+1

具体的に - 質問に正確なエラーメッセージを追加してください。また、有用な情報がある場合に備えて、クラッシュログを追加することをお勧めします。また、 'zip'の値が' Int16'として表現され、それほど大きくないのは確かですか? –

+0

@RoboticCatあなたがそれを言及したので、数字はInt16のために大きすぎます。ありがとう! –

+0

問題ありません。あなたのコードはクラッシュを最小限に抑えるSwiftの機能を利用していないので、コードを構造化する方法については、@DaveWestonの回答をご覧ください。 –

答えて

2

コードからすべて!を取り除く必要があります。 「私は何か間違ったことをすれば、ここでクラッシュ」それはちょうど、コンパイラに指示します:あなたはアドレスを持っていない場合はそのコードのいずれかを実行するにはポイントがありませんので

if let str = zipField.text, 
    let zip = Int16(str) { 
    address?.zip = zip 
} 

また、あなたはスウィフトのguard声明についてお読みください。次のようなものを入力してください:

guard let addr = address else { return } 
addr.zip = 90210 
0

address?.zip = Int16(zipField.text!) 

と構造Int16の文書では、およそinit?(String, radix: Int)、以下の議論がある:

テキストが正規表現「に一致しない場合は、[+ - ]を?[0-9a-zA-Z] +」、または指定された基数で示す値が表現できない場合、結果はnilになります。

変換するには、テキストが有効であることを確認する必要があります。

関連する問題