我目前正在使用带有Beacons的iOS应用程序(Estimote,如果重要的话)。
我使用代码示例下载了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个数组,我存储了Beacons数据:
struct BeaconsStruct {
static var uuidT: [String] = []
static var minorT: [String] = []
static var majorT: [String] = []
}
我想知道如何使用BeaconID函数和UUID运行循环,主要,次要设置为变量,它将从我的数组加载Beacon列表,而不是直接在代码中硬编码。这很重要,因为我的应用程序的一部分从JSON获取Beacon的列表并将其放在上面的结构中。
答案 0 :(得分:2)
这可能不是最快的解决方案,但它很有效且很简单:
假设这三个数组的长度都相同:
static var uuidT: [String] = []
static var minorT: [String] = []
static var majorT: [String] = []
您同时遍历所有这三个对象并创建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()))
答案 1 :(得分:0)
这可以在&#34;声明&#34;中完成。不使用for循环的方法:
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) }
我个人更喜欢将minorT和majorT数组存储在适当的(Int)类型中,只需使用:
var BaconIDs = uuidT.indices.map
{ BeaconID(UUIDString: uuidT[$0], major: majorT[$0], minor: minorT[$0]) }