2017-03-29 13 views
-1

私はIntと思われる値を持っていますが、タイプ(of:value)を返すとオプションです。 。NSStringをIntに変換してスウィフト3.0に追加する方法

let sum = data[0]["total1"] + data[0]["total2"] 

私はそのような2つの値を持っていると私はそれらを追加したいが、それはどれ「オペランド 『または「タイプのバリュー」任意』のバイナリ演算子は+ 2に適用することはできない」と言って、私はそれを行うことはできません。 msgstr "メンバーには 'intValue'がありません" msgid。

この「Any」をIntに変換して追加するにはどうすればよいですか?

ありがとうございました。

答えて

1

基礎となるオブジェクトがNSStringなので、あなたも行うことができます。

if let num1 = (data[0]["total1"] as? NSString)?.intValue, 
    let num2 = (data[0]["total2"] as? NSString)?.intValue { 
    let sum = num1 + num2 
} 

@rmaddyがあれば、コメントで指摘したように値は整数ではありません("hello"など)。0に変換されます。あなたのアプリが受け取っているデータの知識とこの場合に起こりたいことに応じて、その結果は適切かもしれません。

.intValueは、Int(str)と比較して文字列データ形式のほうが寛容です。先頭と末尾のスペースは無視され、13.1などの浮動小数点値は整数に変換されます。再び、あなたのアプリで何が起こりたいかによって異なります。

+3

このアプローチの1つの問題は、文字列が数字でない場合、0を得ることです。これは、アプリケーションの必要性に応じて適切な場合とそうでない場合があります。 – rmaddy

+0

@rmaddy、良い点。一方、先頭と末尾のスペースはより寛容であり、少なくとも13.1から13に変換されます。 – vacawama

+0

この方法は私には役に立ちます。どうもありがとうございます!! – ckim16

6

オプションのバインドを使用して、値がゼロ以外の文字列であり、Intに変換できることを確認します。

if let str1 = data[0]["total1"] as? String, let str2 = data[0]["total2"] as? String { 
    if let int1 = Int(str1), let int2 = Int(str2) { 
     let sum = int1 + int2 
    } else { 
     // One or more of the two strings doesn't represent an integer 
    } 
} else { 
    // One or more of the two values is nil or not a String 
} 
+0

ダング、私にそれを打つ:) –

+2

私はこれのための重複がないことに驚いている。 – JAL

+0

欠落しているキーと 'Int'に変換できない値を区別することに気をつけなければ、ここで' if let'をひとつだけ得ることができます。 – BallpointBen

0

これは私がそれを行う方法です。

extension String { 
    var asInt: Int? { 
     return Int(self) 
    } 
    var isInt: Bool { 
     return Int(self) != nil 
    } 
} 

call it as follows (assuming a property called result): 

     let stringOne = "14" 
     let stringTwo = "12" 
     if stringOne.isInt && stringTwo.isInt { 
      self.result = stringOne.asInt + stringTwo.asInt 
     } 
+2

Mehは 'isInt'をチェックし、' if''で 'Int'コンストラクタをラップするのではなく' asInt'を呼び出すより多くの仕事があるようですまたは「ガードレット」。オプションと戦わないでください! – JAL

+0

お聞きします。あまりにも激しく戦っているわけではありません。一部の人々は、オプションを完全に理解する前に、選択肢に繰り返し曝露する必要があります。 – Mozahler

+0

@ JAL、あなたは自分自身と矛盾しています - あなたは「選択肢と戦わないでください? – BallpointBen

関連する問題