2017-01-08 3 views
0

В настоящее время я работаю над приложением iOS w/Beacons (оценка, если это имеет значение).Объявление цикла в функции

Я скачал Estimote SDK с примерами кода, изменил их, чтобы заполнить мои потребности, однако они содержат список устройств, которые я не могу найти.

Для уточнения, после FUNC добавляет BeaconID:

self.proximityContentManager = ProximityContentManager(
     beaconIDs: [ 
      BeaconID(UUIDString: "B9407F30-F5F8-466E-AFF9-25556B57FE6D", major: 12461, minor: 34159), 
      BeaconID(UUIDString: "B9407F30-F5F8-466E-AFF9-25556B57FE6D", major: 37813, minor: 3), 
      BeaconID(UUIDString: "B9407F30-F5F8-466E-AFF9-25556B57FE6D", major: 33562, minor: 37486), 
     BeaconID(UUIDString: "B9407F30-F5F8-466E-AFF9-25556B57FE6D", major: 5913, minor: 4), 
     ], 

     beaconContentFactory: CachingContentFactory(beaconContentFactory: BeaconDetailsCloudFactory())) 

Моя проблема заключается в том, что у меня есть 3 массивы в структуры, где я хранить маяки данные:

struct BeaconsStruct { 
    static var uuidT: [String] = [] 
    static var minorT: [String] = [] 
    static var majorT: [String] = [] 
} 

Я задаюсь вопросом, как я могу run for loop с функцией BeaconID и UUID, major, minor, заданный как переменная, которая будет загружать список Beacon из моих массивов, а не жестко кодировать их непосредственно в коде. Это важно, потому что часть моего приложения выбирает список Beacon из JSON и помещает это в структуру выше.

+0

Почему бы просто не сохранить список '[BeaconID]' и передать это? Зачем вам нужен дополнительный набор массивов? Просто сделайте свою переменную 'let beacons = [BeaconID (UUIDString: ...), BeaconID (UUIDString: ...) ...]' Никогда не храните три параллельных массива, если вы можете им помочь. Храните один массив структур. Вы определенно не должны хранить младшие/основные числа в виде строк. Непонятно, почему вы создали BeaconsStruct (или откуда вы его получите). –

ответ

2

Это может быть не самым быстрым решением, но это работает и просто:

Если предположить, что эти три массивы будут все иметь одинаковую длину:

static var uuidT: [String] = [] 
static var minorT: [String] = [] 
static var majorT: [String] = [] 

You цикл через все три из них в в то же время и создавать BeaconID объектов:

var beaconIDs = [BeaconID]() 
for i in 0..<uuidT.count { 
    beaconIDs.append(BeaconID(UUIDString: uuidT[i], major: Int(majorT[i])!, minor: Int(minorT[i])!)) 
} 

Затем, вы можете создать свой контент-менеджер бесконтактный:

self.proximityContentManager = ProximityContentManager(
     beaconIDs: beaconIDs, 
     beaconContentFactory: CachingContentFactory(beaconContentFactory: BeaconDetailsCloudFactory())) 
+0

Спасибо, они имеют одинаковую длину, однако я изменил beaconIDs.append (BeaconID (UUIDString: BeaconsStruct.uuidT [i], major: Int (BeaconsStruct.majorT [i]) !, minor: Int (BeaconsStruct.minorT [i])!)), чтобы получить доступ к структуре, и я продолжаю получать ошибку: элемент «Generic parameter» не может быть помехой –

0

Это может быть сделано в «декларативном» способе без использования для цикла:

var beaconIDs = uuidT.enumerated().map 
       { BeaconID(UUIDString: $1, major: Int(majorT[$0])!, minor: Int(minorT[$0])!) } 

или, если вы хотите сохранить литейный типа/преобразование из вызовов функций:

var beaconIDs = zip(majorT.map{Int($0)!}, minorT.map{Int($0)!}).enumerated().map 
       { BeaconID(UUIDString: uuidT[$0], major: $1.0, minor: $1.1) } 

Я лично предпочел бы хранить минорные и крупные массивы в их подходящем (Int) типе и использовать только:

var BaconIDs = uuidT.indices.map 
       { BeaconID(UUIDString: uuidT[$0], major: majorT[$0], minor: minorT[$0]) }