Swift

2014-06-09 8 views
58

'de boş diziler sözlüğünü başlatılıyor Swift'de boş dizileri başlatmaya başımı kaydırmaya çalışıyorum.Swift

var myStringArray: String[] = [] 
myStringArray += "a" 
myStringArray += "b" 

-> ["a", "b"] 

ve tamsayılar

o da böyle NSImage nesneleri olarak nesnenin diğer türleri için çalışır
var myIntArray: Int[] = [] 
myIntArray += 1 
myIntArray += 2 

-> [1, 2] 

için:

let path = "/Library/Application Support/Apple/iChat Icons/Flags/" 
let image1 = NSImage(byReferencingFile: path + "Brazil.png") 
let image2 = NSImage(byReferencingFile: path + "Chile.png") 

var myImageArray: NSImage[] = [] 
myImageArray += image1 
myImageArray += image2 

-> [<NSImage 0x7fe371c199f0 ...>, <NSImage 0x7fe371f39ea0 ...>] 
dizeleri oldukça yalındır var dizisi için

Ancak, boş bir Sözlük dizisini başlatmak için sözdizimini çözemiyorum. (MyNewDictArray ve myDictArray karıştırma) Aşağıdaki kodda bir hata oluştu ve düzeltilmiş zaman kokan:

let myDict1 = ["someKey":"someValue"] 
let myDict2 = ["anotherKey":"anotherValue"] 

var myDictArray = [myDict1] 
myDictArray += myDict2 

-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]] 

EDIT:

Ben bir başlangıç ​​değeri ile başlatılıyor çalışır çünkü Sözlükler dizisi var biliyorum Söylediğim gibi çalışıyorum.

bu yok gibi:

let myDict1 = ["someKey":"someValue"] 
let myDict2 = ["anotherKey":"anotherValue"] 

var myNewDictArray: AnyObject = [] 
myDictArray += myDict1 
myDictArray += myDict2 

-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]] 
ancak

Bu (eğer sözdizimi olmasını beklediğiniz olan) başarısız: hata Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'

ile

var myNewDictArray: Dictionary[] = [] 

Yani soru, boş bir Sözlük Öğesi dizisini başlatmak için doğru yol nedir ve bu sözdizimi var myNewDictArray: Dictionary[] = [] neden çalışmıyor?

cevap

158

Sen sözlüklere türlerini vermek gerekir:

var myNewDictArray: [Dictionary<String, Int>] = [] 

veya

var myNewDictArray = [Dictionary<String, Int>]() 

Düzenleme:

var myNewDictArray: [[String:Int]] = [] 

veya

: Ayrıca daha kısa sözdizimi kullanabilirsiniz
var myNewDictArray = [[String:Int]]() 
5

bu olmuyor nedeni:

var myNewDictArray: Dictionary[] = [] 

Eğer bunu tanımlarken tuşları ve sözlük değerleri için türlerini sağlamak için ihtiyaç vardır.

var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]() 
var dictArray2: Dictionary<String, String>[] = [] 
var dictArray3 = Dictionary<String, String>[]() 
+1

Evet, bu işe yarar. Bunu yapmanın iki yolu var mı? – dwkns

+0

Swift, derleme zamanında * tip çıkarımını * kullanır; bu nedenle, bir değişken bildirirken ya türünü belirtebilir ('dictArray2' gibi) ya da derleyicinin çözebileceği bir şeyi ('dictArray3' gibi) atayabilirsiniz. İlk satır, gerekenden daha ayrıntılıdır, ancak derleyici bunu önemsemez. –

+0

Swift 2 üzerinde değişiklik yapmalıyım var productImageArray: [Dictionary ] = [] ** – swiftBoy

9

Bu boş, değişmez sözlüğü oluşturur:: Bir değişken isterseniz

let dictionary = [ : ]

Ve bu satırların her biri size dize anahtarları ve dize değerleri ile sözlükleri, boş bir dizi yaratacak tek:

var dictionary = [ : ]

bu sözlükleri varsayılan her ikisi için Dictionary<String?, AnyObject?>.

+0

Örneğiniz, sözlüklerin değişmezliği değil, değişkenlerin değişmezliği ile ilgili değildir. –

0

Artık öğe birleştirmeyi kullanamazsınız. u 2.3 hızlı kullanmak istiyorsanız

class Image {} 
Image i1 
Image i2 

var x = [Image]() 

x += i1 // will not work (adding an element is ambiguous) 
x += [i1] // this will work (concatenate an array to an array with the same elements) 

x += [i1, i2] // also good 
0
var yourArrayname = [String]() // String or anyOther according to need 
-1

Bunu kullanabilirsiniz!

let path = "/Library/Application Support/Apple/iChat Icons/Flags/" 
let image1 = UIImage(contentsOfFile: readPath + "Brazil.png") 
let image2 = UIImage(contentsOfFile: readPath + "Chile.png") 

var myImageArray = [UIImage]() 
myImageArray.append(image1) 
myImageArray.append(image2) 
+1

Lütfen kod yazdığınız şeyi bir açıklama ekleyin. Ve neden op's problemini düzeltmeli. – jmattheis