Преобразовать массив в строку? в Свифте
Я работаю со средством выбора ActionSheetPicker 3.0 ( https://github.com/skywinder/ActionSheetPicker-3.0) и у меня возникла новая проблема при работе с возвращаемыми значениями из ActionSheetMultipleStringPicker. У меня запущен элемент управления, и я могу возвращать значения из него, но я хочу иметь возможность поместить возвращаемые значения из средства выбора в отдельные переменные или во что-то, что я могу объединить. Я нашел множество примеров, но не могу понять, как заставить их работать.
То, что я обнаружил при отладке, это то, что ActionSheetMultipleStringPicker возвращает массив Any?.
Отладка показывает следующее:
значения какие-нибудь? некоторые payload_data_0 Builtin.RawPointer 0x60800044fdb0 0x000060800044fdb0 -> 0x000000010dacddd8 (недействительными *)0x000000010dacdf18: __NSArrayI payload_data_1 Builtin.RawPointer 0x335392d30 0x0000000335392d30 payload_data_2 Builtin.RawPointer 0x10d28d798 0x000000010d28d798 libobjc.A.dylib`objc_retainAutoreleasedReturnValue + 35 instance_type Builtin.RawPointer 0x60800005d5c8 0x000060800005d5c8
значения - это возвращаемое значение из выбора.
Несколько вещей, которые я попробовал:
let stringText: String? = String(describing: values)
print(stringText)
Это печатает:
Необязательно ("Необязательно (<__ NSArrayI 0x60800044be20>(\ nOne, \ nMany, \ naaa \ n) \ n)")
Я также попробовал:
print("\(values as! NSArray)")
Это самый близкий к результатам, которые я ищу, это:
(Один, Много, ааа)
Может ли кто-нибудь помочь в получении значения 'values' в нечто, что я могу разделить на три разных строковых переменных?
Мой код для выбора:
let a = ActionSheetMultipleStringPicker.init(title: "Fertilizer Setup", rows: [
// TODO: Read values from database
["One", "Two", "A lot"],
["Many", "Many more", "Infinite"],
["aaa","sss","ccc","xxxx"]
], initialSelection: [0, 0, 0],
doneBlock: {
picker, indexes, values in
let stringText: String? = String(describing: values)
print(stringText)
print("\(values as! NSArray)")
},
cancel: {ActionMultipleStringCancelBlock in return }, origin: sender)
a?.setCancelButton(UIBarButtonItem(title: "My own title", style: UIBarButtonItemStyle.plain, target: self, action: nil))
a?.show()
1 ответ
Я смог понять это. Я изменил свой код DoneBlock, чтобы быть:
doneBlock: {
picker, indexes, values in
let fertilzerPicker: NSArray = values as! NSArray
self.row.value!.name = fertilzerPicker[0] as! String
self.row.value!.amount = fertilzerPicker[1] as! Int
self.row.value!.unitOfMeasurement = fertilzerPicker[2] as! String
}
Ключевая линия:
let fertilzerPicker: NSArray = values as! NSArray
Создание waxzerPicker позволило мне получить отдельные элементы массива.