如何在Swift的PickerView中返回两个单独的数组

时间:2018-07-20 13:35:12

标签: ios arrays swift uipickerview

我在PickerView中创建了一个SegmentControl,我有两个单独的数组,FirstArray有StringData,Second Array有NSNumber数据。我需要返回两个数组,以便在同一行中以StringData和Number的形式返回。

For Example: First Array has : Ark,silk,temp etc, Second Array has 23,45,56 etc.

如果我仅在PickerView中返回第一个数组,则它返回的是String值,但是我需要同时显示两个数组。我已经在选择器视图中显示了一个数组,但不知道如何返回两个数组数组。 代码:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

   if (pickerView == EventsPickerView) {

   // case EventsPickerView:
        return EventArray.count

   }else {

    switch FabricSegmentControl.selectedSegmentIndex {

    case 0:

        return globalConstants.ClassificationName.count
          //  return globalConstants.ClassificationName.count + globalConstants.ClassificationCount.count

    case 1:

        return globalConstants.ClassificationNameSecond.count





    default:
        return 1
    }
}
  //  return 1
}

 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

 if  (pickerView == EventsPickerView){

   // case EventsPickerView:
        return EventArray[row]

 }else {

    switch FabricSegmentControl.selectedSegmentIndex {

    case 0:

        return globalConstants.ClassificationName[row] as? String




    case 1:

        return globalConstants.ClassificationNameSecond[row] as? String



    default:
        return "error occured"
    }

}

   // return "error occured"


}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    if (pickerView == EventsPickerView){

        eventTextField.text = EventArray[row]
    }else {

        switch FabricSegmentControl.selectedSegmentIndex {

        case 0:



                TypeOfSilkTextField.text = globalConstants.ClassificationName[row] as? String




        case 1:

              TypeOfSilkTextField.text = globalConstants.ClassificationNameSecond[row] as? String


        default:
            break
        }
    }

这些是我的数组名称

First Array :globalConstants.ClassificationName.count

SecondArray name :globalConstants.ClassificationCount.count

2 个答案:

答案 0 :(得分:3)

您正在重用NSNumber作为String。这就是为什么返回nil值的原因。 尝试将NSNumber转换为String。

答案 1 :(得分:2)

由于2个数组相等,因此请在此处返回其中一个

return globalConstants.ClassificationName.count

//

titleForRow

 return globalConstants.ClassificationName[row] as? String ?? "" + ( globalConstants.ClassificationCount[row] as? String ?? "" )

//

didSelectRow

TypeOfSilkTextField.text = globalConstants.ClassificationName[row] as? String ?? ""  + ( globalConstants.ClassificationCount[row] as? String ?? "" )

但是最好创建一个将它们作为一个单元保存的结构

//

像声明它一样有意义

 static let ClassificationName = ["value","value2"]

将被推断为字符串[String] ---到return ClassificationName[row]

 static let ClassificationCount = [25,26]

这将被推断为整数[Int] ---到return "\(ClassificationCount[row])"

或者是

 static let ClassificationCount = ["25","26"]

这将被推断为字符串[String] ---到return ClassificationCount[row]