2016-11-19 8 views
0

self.stnIdData.index(of: self.itemAtDefaultPositionId)!を使用して、String []内の要素のインデックスを取得します。何らかの理由で要素が配列にない場合は、エラーをスローする必要があります。 私は次のコードでそれを試してみました:「してみてください」式エラーハンドリングでString []の要素のインデックスを取得しよう

内で発生

機能を投げるには、no呼び出し:

do { 
    var indexOfSelectedId = 0 
    try indexOfSelectedId = self.stnIdData.index(of: self.itemAtDefaultPositionId)! 

    var counter = 0 
    for currStn in self.pickerData { 
     if(counter == indexOfSelectedId){ 
      self.itemAtDefaultPosition = currStn 
     } 
     counter += 1 
    } 

    print(" PV: itemAtDefaultPosition: \(self.itemAtDefaultPosition)") 
    var defaultRowIndex = self.pickerData.index(of: self.itemAtDefaultPosition!) 
    print(" PV: defaultRowIndex: \(defaultRowIndex)") 
    if(defaultRowIndex == nil) 
    { 
     defaultRowIndex = 0 
    } 
    self.stnPicker.selectRow(defaultRowIndex!, inComponent: 0, animated: true) 

} catch let error{ 
    print("Error while setting ID: \(error)") 
} 

しかし、私はこの行のXcodeで、この警告を取得しない:try indexOfSelectedId = self.stnIdData.index(of: self.itemAtDefaultPositionId)!

+1

Swiftには「String []」はありません。これは '[String]'、a.k.a. 'Array 'と呼ばれ、 – Alexander

答えて

1

tryは、throwと宣言されている方法でのみ使用できます。 index(of:)はそのような方法ではありません。 index(of:)はオプションです。通常のオプションのアンラッピングはif letを使用してください。

if let indexOfSelectedId = self.stnIdData.index(of: self.itemAtDefaultPositionId) { 
    var counter = 0 
    for currStn in self.pickerData { 
     if(counter == indexOfSelectedId){ 
      self.itemAtDefaultPosition = currStn 
     } 
     counter += 1 
    } 

    print(" PV: itemAtDefaultPosition: \(self.itemAtDefaultPosition)") 
    var defaultRowIndex = self.pickerData.index(of: self.itemAtDefaultPosition!) 
    print(" PV: defaultRowIndex: \(defaultRowIndex)") 
    if(defaultRowIndex == nil) 
    { 
     defaultRowIndex = 0 
    } 
    self.stnPicker.selectRow(defaultRowIndex!, inComponent: 0, animated: true) 
} else { 
    // Not found - handle as needed. 
} 
関連する問題