Как добавить массив [String] в словарь - PullRequest
0 голосов
/ 06 февраля 2020

Пожалуйста, найдите ниже код для правильного и правильного понимания:

var dictUpdateTasks = [String: String]()
var arrAddSteps = [String]()

 self.dictUpdateTasks["dDay"] = self.btnAddDate.titleLabel?.text
 self.dictUpdateTasks["rem"] = self.btnRemindMe.titleLabel?.text
 self.dictUpdateTasks["steps"] = arrAddSteps

Теперь, это ошибка, в строке

"self.dictUpdateTasks["steps"] = arrAddSteps"
// Error: Cannot assign value of type '[String]' to type 'String?'

Пожалуйста, руководство. Спасибо.

Ответы [ 5 ]

1 голос
/ 06 февраля 2020

Если вы ищете что-то вроде проверки, существует ли значение или нет, с помощью свойства isEmpty обоих String и [String], на более высоком уровне вы можете создать протокол отдельно для этого. Но для этого сценария я бы не рекомендовал это.

protocol EmptyIdentifiable {
    var isEmpty: Bool { get }
}

extension String: EmptyIdentifiable { }
extension Array: EmptyIdentifiable where Element == String { }

var dictionary = [String: EmptyIdentifiable]()
dictionary["string"] = "value"
dictionary["array"] = ["values1", "values2"]

print(dictionary["string"]?.isEmpty)
print(dictionary["array"]?.isEmpty)

Нормальным решением в данной текущей ситуации было бы использование кастинга от Any до String или [String].

if let array = dictionary["array"] as? [String] {
    print(array, array.isEmpty)
}
if let string = dictionary["string"] as? String {
    print(string, string.isEmpty)
}
1 голос
/ 06 февраля 2020

Причина:

dictUpdateTasks имеет тип [String:String], т. Е. Может принимать значения только типа String.

dictUpdateTasks["steps"] = arrAddSteps

Но в Приведенный выше код, вы пытаетесь добавить [String] значение типа к dictUpdateTasks.

Решение:

Измените тип dictUpdateTasks с [String: String] до [String: Any],

var dictUpdateTasks = [String: Any]()
0 голосов
/ 06 февраля 2020

Пожалуйста, попробуйте это:

Необходимо сделать тип вашего словаря [Строка: Любой] () вместо [Строка: Строка] ()

В вашем случае он будет принимать только строковый тип в значении

var dictUpdateTasks = [String: Any]()
var arrAddSteps = [String]()

self.dictUpdateTasks["dDay"] = self.btnAddDate.titleLabel?.text
self.dictUpdateTasks["rem"] = self.btnRemindMe.titleLabel?.text
self.dictUpdateTasks["steps"] = arrAddSteps

print(self.dictUpdateTasks)
0 голосов
/ 06 февраля 2020

Вот правильный способ создания словаря.

Правильный синтаксис

var dictUpdateTasks = [String: Any]()

Вы создали словарь с [String: String]() и вам назначено String Array arrAddSteps вместо String.

0 голосов
/ 06 февраля 2020

Вы должны использовать пару ключ-значение, чтобы назначить строку в словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...