Вот другой подход, который минимизирует работу и оставляет интерфейс чистым. Просто укажите дополнительное свойство, которое возвращает BaseInterface:
public IBaseClass BaseProperties {
get { return this; }
}
Конечно, вам нужно добавить эту часть в свой интерфейс IBaseClass:
public ISingleShot BaseProperties { get; }
Вот соответствующий VB.Net Код:
ReadOnly Property BaseProperties As ISingleShot
Public ReadOnly Property BaseProperties As IBaseClass Implements IClass.BaseProperties
Get
Return Me
End Get
End Property
Вы можете сделать это как:
for category in responseJSON.categories {
print(category.categoryName!)
}
Или вы можете использовать функцию map для получения всех categoryName
, например:
let categoryNames = responseJSON.categories.map {[111].categoryName}
Просто так.
response.categories.forEach { print([110].categoryName) }
Если вы перебираете String
, то каждый элемент представляет собой один символ строки.
Вы можете перебирать массив categories
for category in responseJSON.categories {
print(category.categoryName ?? "No name")
}
Чтобы получить все имена, вы можете использовать compactMap
, который удаляет nil
значения из массива
Далее:
Если каждая категория имеет свое имя, сделайте тип этого свойства необязательным String
(тогда вы можете использовать map
вместо compactMap
)
Я бы улучшил ваше наименование. Переименуйте categoryName
ключ json в name
, используя CodingKeys
enum. Тогда вы можете сделать
category.name
этого.
let categories = responseJSON.categories.map { [110].categoryName }
categories.forEach { print([110]) }
Если вы хотите получить все JSON-файлы форм categoryName
и exercisesInCategory
, то вам не нужно передавать жестко закодированный индекс. Используйте следующую модифицированную функцию, она выполнит свою работу.
private func parse(){
print("Retrieving JSON Data...")
if let url = Bundle.main.url(forResource: "fitnessData", withExtension: "json") {
do {
let data = try Data(contentsOf: url)
let response = try JSONDecoder().decode(Response.self, from: data)
for category in response.categories {
print("Category Name: \(category.categoryName!)")
for exercises in category.exercisesInCategory {
print("Exercise in category: \(exercises)")
}
}
} catch {
print(error)
}
}
}
Если вы хотите поместить оба значения в разные массивы:
var categoryNameList = [String]
var excercisesInCategory = [[String]]
for category in responseJSON.categories {
categoryNameList.append(category.categoryName)
excercisesInCategory.append(category. exercisesInCategory)
}