2016-09-01 3 views
0

こんにちは私は変数を持っていますが、それらのすべてをOptional()に与えます。どうすれば私のコードを以下のように解決できますか?それらのすべてに任意の値を与えます

あなたはコードがkoltuklaridler内検索IDの後にオープンkoltuklarインデックスパス項目を行うこと(コード内のテーブルビューを見ることができます下の下に、いくつかを取る見つけたときあなたは

 for name in json as! [AnyObject] { 

      let SeatName = name["SeatName"] 
      let SeatDesignId = name["SeatDesignId"] 
      self.koltuklar.append("\(SeatName)*\(SeatDesignId)*") 

      if let blogs = json["SeatDetail"] as? [[String: AnyObject]] { 
       for blog in blogs { 

        let TicketTypeId = blog["TicketTypeId"] 
        let TicketTypeName = blog["TicketTypeName"] 
        let Amount = blog["Amount"] 

        self.koltuklaridler.append("\(SeatDesignId)*\(TicketTypeId)*\(TicketTypeName)*\(Amount)*") 


       } 

      } 

を見ることができます下の下JSONはkoltuklarkoltuklaridler配列のためのコードを追加私のJSONファイルも

var koltuklar = [""] 
var koltuklaridler = [""] 

if let myStrings:String! = koltuklar[indexPath.row]{ 

    print("\(myStrings!)") 

    let myStringArrf = myStrings.componentsSeparatedByString("*") 


    print("\(myStringArrf)") 


    if let koltukisims:String! = String(myStringArrf[0]) { 

     cell.koltukName.text = koltukisims 
    } 


    print(" STR - \(myStringArrf[1] as String!)") 


    if let index = koltuklaridler.indexOf(myStringArrf[1] as String!) { 

     let myStringdetaysecilen = koltuklaridler[index] 

     print("myStringdetaysecilen \(myStringdetaysecilen)") 


    } 

)それからvaribles

[ 
    { 
     "SeatDesignId": 16484, 
     "SeatName": "A6", 
     "SaloonId": 148, 
     "SeatDetail": [ 
      { 
       "TicketTypeId": 1, 
       "TicketTypeName": "Okay", 
       "Amount": 13 
      } 
     ] 
    }, 

出力

Optional("A17")*Optional(16254)* 
["Optional(\"A17\")", "Optional(16254)", ""] 
STR - Optional(16254) 

すべての変数の出力オプションは、私はすべてをしようとしたが修正されません。

+0

不要な型の注釈( 'as String!' cast)だけを削除してください。コンパイルが指示しない限り、型に注釈を付けないでください。 – vadian

+0

PS: 'as'キャストで常に' as'は感嘆符/疑問符をとりますが、決して以下のタイプはありません。 – vadian

+0

@vadian私はすべてStringとして削除されました!しかし、すべて同じです!あなたの定義には –

答えて

0

あなたは文字列の補間が"\(...)"すべてのオプションの文字列が開封されていることを確認して使用するとき。辞書から読み取った値は、常にオプションです。です。私は今、空の文字列配列として両方の配列を宣言JSON

に応じて実際の型にキャストを更新:

このコードは、すべてのオプションの文字列

for name in json as! [[String:AnyObject]] { 

    guard let SeatName = name["SeatName"] as? String, 
     SeatDesignId = name["SeatDesignId"] as? Int else { 
     continue 
    } 
    self.koltuklar.append("\(SeatName)*\(SeatDesignId)*") 

    if let blogs = json["SeatDetail"] as? [[String: AnyObject]] { 
    for blog in blogs { 
     if let TicketTypeId = blog["TicketTypeId"] as? Int, 
      TicketTypeName = blog["TicketTypeName"] as? String, 
        Amount = blog["Amount"] as? Int { 
     self.koltuklaridler.append("\(SeatDesignId)*\(TicketTypeId)*\(TicketTypeName)*\(Amount)*")   
     } 
    } 
} 

編集をアンラップ。

var koltuklar = [String]() 
var koltuklaridler = [String]() 

とところで

let myStrings = koltuklar[indexPath.row] 
print("\(myStrings)") 
... 

最初の行に、オプションのバインディングを削除します。アスタリスクで文字列を「シリアライズ」とテーブルビューでそれをデシリアライズするためにあなたの方法は非常に、非常に不器用で、非効率的な。データレコードには、カスタムクラスまたは構造体を使用します。

+0

私のコードのコードは変更しましたが、tableviewは何も表示しません。 –

+0

JSONによると、型は 'String'ではなく数値(' Int')です – vadian

+0

今は来ましたが、問題がありました1:koltuklaridlerはアイテム出力を追加しません[""] let index = koltuklaridler.indexOf(myStringArrf [1]){array –

0

あなたの問題は、それが任意の値を返しますので、あなたが許可すれば声明ずに辞書からの値から文字列を作成しているということです:としてJSONで名の

!私のコメントで述べたように、[ANYOBJECT] {

 if let SeatName = name["SeatName"], 
      let SeatDesignId = name["SeatDesignId"] { 
      self.koltuklar.append("\(SeatName)*\(SeatDesignId)*") 
     } 

     if let blogs = json["SeatDetail"] as? [[String: AnyObject]] { 
      for blog in blogs { 

       if let TicketTypeId = blog["TicketTypeId"], 
        let TicketTypeName = blog["TicketTypeName"], 
        let Amount = blog["Amount"] { 
        self.koltuklaridler.append("\(SeatDesignId)*\(TicketTypeId)*\(TicketTypeName)*\(Amount)*") 
       } 
      } 

     } 
+0

私はそれを試してみましょうコードを与える? –

+0

@ user3441052私は答えを更新した、私はコードをテストしなかったので、あなたが問題がある場合はお知らせください –

+0

同じ男! 'self.koltuklaridler'を印刷すると –

0

オプションは2通りあります。

  1. "!"を使用してアンラップします。値がゼロの場合、このクラッシュの可能性があります。
  2. 「if let」条件を使用して「オプションバインド」という用語呼び出しを使用してアンラップします。
if let var = "assigned your optional variable"{ 
print(var) 
} 

あなたは、オプションなしであなたの変数を取得します。

+0

あなたの答えは私の質問 –

+0

"SeatName!"を使用するか、newVar = seatName {//新しい変数では、オプションなしで見つけられる}を使用しないでください。 –

関連する問題