2017-01-08 8 views
0

私は現在、ビーコン(Estimote、重要な場合)を使ってiOSアプリケーションを開発中です。ループイン関数宣言の場合

私はEstimote SDKをコード例とともにダウンロードし、必要に応じて修正しましたが、変更する方法が見つからないデバイスのハードコードがあります。私は私ができるどのように思ったんだけど

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

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つの配列を有することである。

は、次のfuncはBeaconID追加し、明確にするために、私の配列からビーコンリストをロードする変数としてBeaconID関数とUUID、major、minorを設定してループを実行し、コード内で直接ハードコードしないでください。私のアプリの一部がJSONからBeaconのリストを取得し、これを上の構造体に入れるため、これは重要です。

+0

'[BeaconID]'リスト自体を保存してそれを渡すだけではどうですか?なぜあなたは追加の配列セットが必要ですか? let beacons = [BeaconID(UUIDString:...)、BeaconID(UUIDString:...)...] 'あなたが助けることができるなら、3つの並列配列を決して格納しないでください。構造体の単一の配列を格納します。あなたは間違いなくマイナー/メジャー番号をストリングとして保存すべきではありません。 BeaconsStructを作成した理由(またはどこから取得したのか)は明らかではありません。 –

答えて

2

これは最速の解決策ではないかもしれませんが、それは動作し、シンプルです:

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

あなたループそれらのすべての3つの通過:これらの3つの配列はすべて同じ長さになると仮定すると

あなたは近接コンテンツマネージャを作成することができ、その後

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

:同じ時間とはBeaconIDオブジェクトを作成

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

ありがとう、彼らは同じ長さですが、私はビーコンIDs.append(BeaconID(BeaconsStruct.uuidT [i]、メジャー:Int(BeaconsStruct.majorT [i])!,マイナー:BeaconsStruct.minorT [i])!))構造体にアクセスするとエラーが発生する:汎用パラメータ 'element'は干渉できませんでした –

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

minorTとmajorT配列を適切な(Int)型で格納することをお勧めします。