2016-04-01 21 views
2

Bir sözlük dizisinden aşağıdaki öğelere erişmeye çalışıyorum ve iki sorunum var (her ikisi de farklı yaklaşımlardır). aşağıdaki gibi sözlük dizisi başlatılır:Swift for-loop "İfade türü" [[String: String]] 'daha fazla bağlam olmadan belirsiz

var testingArray = [[String: String]()] 

testingArray.append(["name": "Ethiopia", "url": "localhost:8088"]) 
testingArray.append(["name": "Bugatti", "url": "localhost:8088"]) 
testingArray.append(["name": "Brazil", "url": "localhost:8088"]) 
testingArray.append(["name": "Jasmine", "url": "localhost:8088"]) 
testingArray.append(["name": "Hello", "url": "localhost:8088"]) 

birinci yöntem:

for (k,v) in testingArray { 
    // code here 
} 

nedeniyle (döngü için başlatılır satırda görünür) çalıştırmak Will :

"Expression type '[[String : String]]' is ambiguous without more context 

İkinci yöntem:

for(int i = 0; i < sizeOfArray; i++ { 
    print testingArray[i]."name" 
    print testingArray[i]."url" 
} 

Başımı çizilmeye edilmiştir:

İşte
LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Ethiopia"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Ethiopia"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Bugatti"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Bugatti"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Brazil"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Brazil"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Jasmine"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Jasmine"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Hello"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Hello"], _transform: (Function)) 

elde etmek çalışıyorum yalancı kod eşdeğerdir:

for indices in testingArray { 
    for(k, v) in indices { 
     print(indices.keys) 
    } 
} 

aşağıdaki döndürür Bunun için günlerce ama hızlı ve onun deyimlerini bu çözmek için yeterince iyi bilmiyorum, herhangi bir yardım büyük ölçüde apprec (1 çalışmayı nasıl elde edeceğimizi anlayabilirsek).

+0

endeksleri ile hızlı bir dizi yineleme için, https://stackoverflow.com/a/24028458/958064 bkz:

Ben böyle bir şey arıyorsanız düşünüyorum OP burada – sbauch

cevap

4

Hata iletisinin kafa karıştırıcı/yanıltıcı olduğunu kabul ediyorum. Ancak for (k,v) in testingArray anlam ifade etmiyor, çünkü testingArray bir sözlük değil, bir dizidir. öğeleri, sözlüklerdir. Swift 3.0 bir ekler -

for obj in testingArray { 
    print(obj["name"]) 
    print(obj["url"]) 
} 
+0

teşekkürler yardımcı olacak sayın() 'yöntemi! Bir çekicilik gibi çalışır. Bu benim ilk defa benim sözlüklerimi kullanarak doğru sözdizimini iyi bir şekilde kavramak, ilk kez benim için çok önemli. Sadece bir yan soru, çünkü sözlükler sırasız ve non-sayılabilir, PickerView bir plickerView yüklemek istiyorsanız en kolay yaklaşım tüm sözlük kv çiftleri bir dizi içinde saklamak için evet mi? –

+0

Belirli bir sırada olmalarına ihtiyacınız varsa, evet, bunları bir dizide bulundurmak en kolay yolu olacaktır. Her şey birden fazla özellik içeriyorsa (ör. "Görünen ad" ve "tanımlayıcı"), örneğinizde yaptığınız gibi bir sözlük dizisi kullanmak mantıklıdır. (Ancak, sözlükler * sayılabilir: benim örneğimde, saymak istediğinizde {}}) – jtbandes

+0

(k, v) için bir iç döngü yapabilirdiniz, bu değerleri alabileceğim anlamına mı geliyor? Bu işlevdeki bir sözlükten: pickerView (pickerView: UIPickerView, titleForRow sıra: Int, forComponent bileşeni: Int) -> Dize? {} 'öylesine:' sözlük [satır] ["isim"] '? –