2016-04-11 9 views
1

Kart adı verilen bir yapıda var ve bir kart destesi oluşturması gereken bir işlev oluşturdum. SO üzerinde kart destesi oluşturma konusunda birkaç konu buldum ama bunlar Objective-C'de ya da yapmaya çalışmıyorum enums kullanarak sıralar ve takımlar atayarak.Kartların bir destesinde Kartın her örneğine değer atama

Ben dizeleri bu dizi var:

let fibonacciSeries = ["0", "1", "2", "3", "5", "8", "13", "21", "34", "55", "89", "144", "∞"] 

ve benim createDeck işlevi bu değerleri kullanarak bir deste kart oluşturmak istiyorum: Böyle diyoruz

struct Card { 

var name = String() 

func createDeck(series: [String]) -> [Card] { 
    var deck = [Card]() 
    for value in series { 
     deck.append(Card(name: value)) 
     print("The card name is \(self.name)") 
     } 
     return deck 
    } 
} 

:

let myDeck = Card().createDeck(fibonacciSeries) 

name özelliği, print() çağrısıyla görebileceğim her kart için boş (veya boş) bir özelliktir.

böyle benim adım özelliğini değiştirerek çalıştı:

var name = "" 

Ama yine boş konum.

Biraz daha araştırdım ve bunu bir değer verirseniz bu katma yüzden bir in başlatıcısı buna varsayılan bir değer vermeden bir özellik oluşturabilir öğrendim:

init(name: String) { 
    self.name = name 
} 

Yine Xcode çünkü hiçbir sevinç bana I hatırlatıyor Kart() çağrısında isim için bir değer iletmesi gerekir ve bunu yaptığımda, tüm kartlar girdiğim değer olarak adlandırılır.

Sonuç olarak, bu kartı bir UICollectionView içine koymak ve bu değerleri görmek istiyorum ama Bu özellikte bir daireye yakalanmış gibi görünüyorum ve dışarı çıkamıyorum.

Burada birkaç konuya bakıyorum ve bulabildiğim hiçbiri bir cevap vermedi.

Herhangi bir yardım büyük beğeni topladı.

+0

Kişisel 'name' özellik aslında olmamalı boş, baskı ifadeniz yanlış. Yöntemi çağırdığınız değil, yöntemi çağırdığınız 'Card' örneğinin adını yazdırıyorsunuz. – dan

cevap

2

Sen name sen onu başlangıç ​​durumuna boş bir dize self ait yazdırıyorsanız, yeni Card örneklerini oluşturmak ve bunları diziye ekleme, ancak yeni Card ait name baskı sebebi değildir.

createDeck tarafından döndürülen dizinin kartlarının değerlerini yazdırdıysanız, doğru değerleri görürsünüz.

Kodunuzdaki basit düzeltme, yeni kart için bir değişken kullanmaktır, böylece yazdırabilirsiniz. Bununla birlikte, bu, bir yapının hafifçe işkence görmüş kullanımıdır, ancak bu, bir yapının hafif işkence amaçlı kullanımıdır. createDeck işlevini ve yapıları sınıf işlevlerine sahip olamayacağınız için,örneğini oluşturmak zorundasınız, böylece createDeck numaralı telefonu arayabilirsiniz. Bir Kart Sınıfı oluşturmalısınız ya da nesne yönelimli tasarım açısından belki de daha iyi bir Deck yapısı oluşturmalısınız.

struct Deck { 
    var cards:[Card] 

    init(_ series:[String]) { 
      self.cards = [Card]() 
      for value in series { 
       let newCard=Card(name: value) 
       self.cards.append(newCard) 
       print("The card name is \(newCard.name)") 
      } 
    } 
} 


let myDeck = Deck(fibonacciSeries) 

print(myDeck) 
+0

Teşekkür ederim, Paul. Bu işlevi Kart Yapısı'nda oluşturdum çünkü Apple Swift Programlama Kılavuzunun önerdiği türden bir örnek. Bu doğru bir şey hissetmediğinden, bu öneriyi yaptığınıza memnun oldum. Ayrı bir Deck yapısı çok daha mantıklı. – Jim

0

Sen createDeck fonksiyon statik ilan olmamasıdır en büyüğü birkaç sorun var, bu yüzden sadece varolan karta istinaden çağırmak. Yazdırma işlevinizi çağırdığınızda, paul'un işaret ettiği gibi, bunu kullanmak için bir kartınız olması için oluşturduğunuz kukla örnek üzerinde çalıştırıyorsunuz.

struct Card { 
    var name = String() 

    static func createDeck(series: [String]) -> [Card] { 
     var deck = [Card]() 
     for value in series { 
      deck.append(Card(name: value)) 
      print("The card name is \(self.name)") 
     } 
     return deck 
    } 
} 

let fibonacciSeries = ["0", "1", "2", "3", "5", "8", "13", "21", "34", "55", "89", "144", "∞"] 

let deck = Card.createDeck(fibonacciSeries) 

print(deck[0].name) 

Ve FWIW, siz createDeck kolaylaştırabilirsiniz: Making createDeck statik şimdi artık bir kart ihtiyacı olarak çalışacak şekilde o çözer

static func createDeck(series: [String]) -> [Card] { 
    return series.map { Card(name: $0) } 
} 
İlgili konular