В вашем коде вы объявили массив (не словарь).Чтобы сохранить фрукт в словаре указанной структуры, попробуйте следующее:
var fruits: [String: (description: String, price: String)] = [:]
func addFruit() {
fruits["Banana"] = (description: "A tropical fruit, price: "0.65")
}
Переменная fruits
- это словарь с типом ключа String
и типом значения (description: String, price: String)
,кортеж с двумя именованными полями String
(обратите внимание, что имена являются необязательными).
Обратите внимание, как кортеж ключа и значения словаря инкапсулирует все свойства класса Fruit
.На самом деле класс Fruit
здесь вообще не используется.Если вы не планируете добавлять некоторые методы или вычисляемые свойства в класс Fruit
, использование этой словарной структуры для ваших целей может быть лучшим подходом.
В отличие от некоторых других языков, не все должно быть заключено вкласс в Swift;для простого типа фруктов с несколькими свойствами может быть достаточно кортежа.Swift предоставляет множество способов инкапсуляции одних и тех же данных.
Например, вы также можете использовать массив вместо словаря и добавить поле имени в кортеж:
var fruits: [(name: String, description: String, price: String)] = []
func addFruit() {
fruits.append(
(name: "Banana", description: "A tropical fruit", price: "0.65")
)
}
Кроме того, вы можетемог бы объявить этот кортеж как его собственный тип для более легкого использования:
typealias Fruit = (name: String, description: String, price: String)
var fruits: [Fruit]
...