Я с удовольствием программирую на Swift в течение нескольких недель - действительно наслаждаюсь этим, но я попал в блок.Я гуглил и не могу найти объяснения.Я создал гораздо более простой тестовый пример, у которого не было такой же проблемы.
Я получаю сообщение об ошибке "Тип 'SNstorelocation' не имеет нижестоящих элементов", а также "Значение типа '[SNstorelocation]?'У меня нет члена 'append' ".
Я много читал о подписке, но не думаю, что это проблема.Я хочу иметь массив структур, один из элементов также является массивом структур.Я видел это повсюду, и в моем маленьком тестовом примере это не сработало.
Итак, я пришел к выводу (возможно, неправильно!), Что почему-то я не создал и не создал массив.Если бы я имел, у него должен быть индекс для доступа к данным, и код должен работать, но это не так.
Вот небольшой пример, который я создал, который я считаю таким же, как мой пример, но более простой, который работает.
struct test1 {var t1Item1: Int?var t1Item2: String?var myArray = test2} struct test2 {var t2Item1: Int?var t2Item2: Int?
init(v1: Int, v2: Int) {
self.t2Item1 = v1
self.t2Item2 = v2
}
}
, и я могу делать все обычные операции с массивами:
var myVar = [test1]()
var newItem = test1()
newItem.t1Item1 = 1
newItem.t1Item2 = "Hi"
myVar.append(newItem)
let myCount = myVar[0].myArray.count
Где в качестве примера (всего несколько элементов из структуры удалены, чтобы упростить задачу)и коротко)
struct SNStoreItemGroups: Codable {
var Welland: [SNStoreItem]
var Other: [SNStoreItem]
init() {
self.Welland = []
self.Other = []
}
}
struct SNStoreItem: Codable {
var locations = [SNstorelocation]()
var customerName: String?
var customerPhone: String?
var customerEmail: String?
var notes: String?
}
struct SNstorelocation: Codable {
let longitude: Double
let latitude: Double
let country: String
let user: Int
let timestamp: Double = Date().timeIntervalSinceReferenceDate
init(_ lon: Double, _ lat: Double, _ ISOcountry: String, _ UserID: Int) {
self.longitude = lon
self.latitude = lat
self.country = ISOcountry
self.user = UserID
}
}
var mySNData: SNStoreItem?
var SNStore: SNStoreItemGroups = SNStoreItemGroups()
// Some code to populate the SNStore
if let locIndex = SNStore.Welland[index].locations.index(where: { $0.longitude == MyLongitude }) {
// This then causes the error
// "Type 'SNstorelocation' has no subscript members"
if SNStore.Welland[index].locations[locIndex].timestamp {
}
}
Может кто-нибудь объяснить, почему во втором примере нет подписок, а первый работает нормально?Я просто не понимаю - особенно из-за первого запроса, который, кажется, подходит для поиска индекса - я уверен, что только что сделал что-то глупое!
TIA.