Присоединение к словарю с использованием класса swift - PullRequest
0 голосов
/ 13 марта 2019

Как бы я мог создать простое дополнение к словарю с функцией, связанной с классом?

Словарь должен быть отформатирован как [String: (String, String)]

class Fruit {
        let name: String
        let description: String
        let price: Int
        var fruits: [Fruit] = [name: (description, price)]

        init(name: String, description: String, cost: Int) {
            self.name = name
            self.description = description
            self.price = price
        }
        func addFruit() {
            fruits.append(Fruit:)
    }

    }

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

@ Райан, это простой способ сделать это.

class Fruit {
  let name: String
  let price: Double
  let description: String
  init(name: String, price: Double, description: String) {
    self.name = name
    self.price = price
    self.description = description
  }
}

class FruitFactory {
   var fruits: [Fruit] = []
}

var fruitfactoryObj = FruitFactory.init()

var fruitObj = Fruit.init(name: "apple", price: 0.65, description: "good for health")
fruitfactoryObj.fruits.append(fruitObj)

Также, пожалуйста, используйте double вместо Int let price: Double

print(fruitfactoryObj.fruits[0].name)

результат должен быть яблоком :)

0 голосов
/ 13 марта 2019

В вашем коде вы объявили массив (не словарь).Чтобы сохранить фрукт в словаре указанной структуры, попробуйте следующее:

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]

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