对于函数声明中的循环

时间:2017-01-08 20:54:49

标签: swift swift3 estimote

我目前正在使用带有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的列表并将其放在上面的结构中。

2 个答案:

答案 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]) }