Swift 函数声明中的For循环

Swift 函数声明中的For循环,swift,swift3,estimote,Swift,Swift3,Estimote,我目前正在使用iOS应用程序和信标(Estimote,如果有必要的话) 我下载了带有代码示例的Estimote SDK,对它们进行了修改以满足我的需要,但是它们硬编码了那里的设备列表,我找不到修改的方法 为了澄清,以下func添加了BeaconID: self.proximityContentManager = ProximityContentManager( beaconIDs: [ BeaconID(UUIDString: "B9407F30-F5

我目前正在使用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个数组:

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

我想知道如何使用BeaconID函数和UUID,major,minor set作为变量来运行for循环,它将从我的数组中加载信标列表,而不是直接在代码中硬编码它们。这很重要,因为我的应用程序的一部分从JSON获取Beacon的列表,并将其放入上面的结构中

这可能不是最快的解决方案,但它有效且简单:

假设这三个数组的长度都相同:

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])!))
}

这可能不是最快的解决方案,但它有效且简单:

假设这三个数组的长度都相同:

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])!))
}
这可以通过“声明式”方式完成,而无需使用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) }
我个人更喜欢以适当的(Int)类型存储minorT和majorT数组,只需使用:

var BaconIDs = uuidT.indices.map
               { BeaconID(UUIDString: uuidT[$0], major: majorT[$0], minor: minorT[$0]) }
这可以通过“声明式”方式完成,而无需使用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) }
我个人更喜欢以适当的(Int)类型存储minorT和majorT数组,只需使用:

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

谢谢,它们的长度是相同的,但是,我修改了BeaconID.append(BeaconID(uuiString:BeaconStruct.uuidT[I],major:Int(BeaconStruct.majorT[I]),minor:Int(BeaconStruct.minorT[I])来访问该结构,我不断得到错误:通用参数'element'不能被干涉谢谢,但是它们的长度相同,我修改了BeaconID.append(BeaconID(uuiString:BeaconStruct.uuidT[I]、major:Int(BeaconStruct.majorT[I])、minor:Int(BeaconStruct.minorT[I])来访问该结构,我不断得到错误:通用参数'element'不能被干涉为什么不直接存储
[BeaconID]
列表本身并传递它呢?为什么需要一组额外的阵列?只要让你的变量
让beacons=[BeaconID(uuistring:…),BeaconID(uuistring:…)…]
如果你能帮助的话,永远不要存储三个并行数组。存储单个结构数组。您绝对不应该将次要/主要数字存储为字符串。不清楚您为什么创建BeaconsStruct(或者从何处获取BeaconsStruct)。为什么不存储
[BeaconID]
列表本身并将其传递进来?为什么需要一组额外的阵列?只要让你的变量
让beacons=[BeaconID(uuistring:…),BeaconID(uuistring:…)…]
如果你能帮助的话,永远不要存储三个并行数组。存储单个结构数组。您绝对不应该将次要/主要数字存储为字符串。不清楚您为什么创建BeaconStruct(或者从何处获得它)。