Преобразовать массив в строку? в Свифте

Я работаю со средством выбора 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 позволило мне получить отдельные элементы массива.

Другие вопросы по тегам