2016-04-11 6 views
-2

API呼び出しにデータを送信する際に小さな問題がありますが、配列には緯度と経度の値が含まれていますが、配列のデータは配列形式を受け入れません文字列フォーマットであるが、私のAPIは、ここに迅速にNSMutableArrayにDouble値を追加する方法

私のサンプルコードのみdouble型の値を受け入れる:

for (var i=0 ; i<startLocationArray.count;i++) { 
        let dictLatLong = startLocationArray[i] as! NSArray 
        print("dictLatLong==\(dictLatLong)") 

        for dict in dictLatLong 
        { 
         let arr: NSArray = dict as! NSArray 
         for subdict in arr 
         { 
          let arrLatLong = NSMutableArray() 
          let str = String(subdict.valueForKey("lng")! as! Double)+", "+String(subdict.valueForKey("lat")! as! Double) 
          arrLatLong.addObject(str) 
          self.outputArray.addObject(arrLatLong) 
         } 

        } 

私の出力は次のとおりです。

(
    "80.2622228, 13.125962" 
), 
    (
    "80.2617606, 13.1259684" 
), 
    (
    "80.2617484, 13.1229377" 
), 
    (
    "80.2592969, 13.1229812" 
), 
    (
    "80.2594669, 13.118439" 
) 

私の予想outpuをtは次のとおりです。

(
    80.2622228, 13.125962 
), 
    (
    80.2617606, 13.1259684 
), 
    (
    80.2617484, 13.1229377 
), 
    (
    80.2592969, 13.1229812 
), 
    (
    80.2594669, 13.118439 
) 

アレイからの二重引用符を削除するか、NSMutableArrayのにdouble値を追加する方法?

+1

あなたはかなり力アンラップoptionalsように見えるました。しないでください。あなたはちょうどクラッシュを求めています。それらを適切に処理する方法を学んでください(http://stackoverflow.com/a/36360605/2976878)。 – Hamish

答えて

1

文字列をdoubleに変換して配列に追加する必要があります。

... 
let yourDoubleValue = Double(str) 
arrLatLong.addObject(yourDoubleValue) 

最初の場所で正しく値を取得できないため、sthを試してください。

var arrLatLong : [Double] = [] 
let strings = [["80.2622228,13.125962"], 
       ["80.2617606,13.1259684"], 
       ["80.2617484,13.1229377" ], 
       ["80.2592969,13.1229812"], 
       ["80.2594669,13.118439" ]] 

     for element in strings { 
      let twoValueString = element.joinWithSeparator(",") 
      let valueArray = twoValueString.componentsSeparatedByString(",") 

      for point in valueArray { 
       if let value = Double(point) { 
        arrLatLong.append(value) 
       } 
      } 
     } 
     print(arrLatLong) 
    } 
+0

私はこれを行ったが、私のアプリがクラッシュした – user3458924

+0

おそらくあなたの力アンラッピングのため。クラッシュが起こったかどうかを確認します。 – LoVo

+0

私のエラー:致命的なエラー:予期せぬことにnilが見つかりました。オプション値 "arrLatLong.addObject(yourDoubleValue!)"をハイライト表示しています。 – user3458924

0

データを2倍にしたい場合は、なぜ文字列として格納しますか?あなたは直接番号をダブルとして保存することができます。

eg. 

let arr : NSMutableArray = NSMutableArray(); 
arr.addObject(NSNumber.init(double: 82.5621)); 
print("arr = \(arr)"); 
0

あなたのapiがダブルを受け入れるなら、なぜ文字列を配列に追加していますか? この

for dict in dictLatLong 
  { 
    let arr: NSArray = dict as! NSArray 
     for subdict in arr 
      { 

let arrLatLong = NSMutableArray() 
    if let value = subdict.valueForKey("lng") as? NSString, value1 = subdict.valueForKey("lat") as? NSString { 
     let val = value.doubleValue 
     let val1 = value1.doubleValue 
     arrLatLong.addObject(val) 
     arrLatLong.addObject(val1) 
     print(arrLatLong) 
     self.outputArray.addObject(arrLatLong) 
     print(self.outputArray) 
    } 
    } 
+0

タイプ(Any Object)の引数リストで「Double」タイプのinitialiserを呼び出すことはできません。このエラーが発生しました – user3458924

+0

更新された回答。 – Sahil

+0

outputArrayは、まず最初に – user3458924

0

を試してみてください私は

let str1 = String(subdict.valueForKey("lng")!) 
let str2 = String(subdict.valueForKey("lat")!) 

let floatLng = Double(str1) 
let floatLat = Double(str2) 

var arrLatLong1 : [Double] = [] 

arrLatLong1.append(floatLng!) 
arrLatLong1.append(floatLat!) 

self.outputArray.addObject(arrLatLong1)