2016-03-23 16 views
1

Varsayılan amaçlar için 2000 olarak ayarlanmış currentYear adlı bir değişkenim var. currentYear, dizeler dizimdeki bir değişkendir, bu yüzden dize hangi yılı biliyordur. Bu, sınıfı olmayan bir dosyada. Bu değerler dünya çapında erişilebilir. düğmeye basıldığında, başka bir viewController gider 2013, 2014, 2015 ve 2016: viewController yılında dizisi yeni xcode güncellemesinden bu yana değişmiyor - hızlıca

import UIKit 

var currentYear = 2000 

var array = [ 
"The year you pressed is \(currentYear)", 

] 

Ben içerdiği yıla eşit etiketleri ile düğmeler bulunur.

import UIKit 

class ViewController: UIViewController { 

    @IBAction chooseYearBtnPressed(sender: AnyObject) { 

     currentYear = sender.tag 

     print(array) 

     performSegueWithIdentifier("CustomSegue", sender: nil) 

    } 


} 

Son xcode güncelleştirmesinden önce, bu yalnızca iyi çalıştı. Düğmeye her basıldığında, yüklenen dizi aynı değere sahiptir. Yeni değer ne olursa olsun. Şimdi değil. CurrentYear yeni bir değer atandıktan sonra, dizideki currentYear 2000 kalır.

Bunu nasıl düzeltebilirim, böylece currentYear yeni bir değer olarak geçtiğime göre değişmeye devam eder mi?

Çözüm: Kod hiç bunu yapmak istediğinizi nasıl yaptığını

var array: [String] { 
    return ["The Year you pressed is \(currentYear)"] 
} 
+0

Bir süreliğine Swift evrimini izlemedim, ancak mevcut Xcode sürümünün sürüm notlarında bir şeyler bulabilirsiniz. Genellikle Apple, yeni bir Xcode'u yayınlarken Swift'e yapılan tüm değişiklikleri listeler. – Alex

+0

Yaptım. Oradaki sebebi bulamadım ya da bunu nasıl düzeltebilirim? – Jer

cevap

1

görmüyorum. array'a bir değer atayan kodunuz, ilk kez bir görünüm denetleyicinizin bir örneğini oluşturduğunuzda bir kez daha patlar. (Onların görünüm denetleyicisi özellikleridir böylece currentYear ve array senin tanımları bir görünüm denetleyici içinde olduklarını varsayıyorum.)

Eğer array her zaman CURRENTYEAR değişikliklerin değeri güncellemek istiyorsanız, bir didSet eklemek gerekir currentYear işlevi. Böyle bir şey:

import UIKit 

var array: [String] 
var currentYear 
{ 
    didSet 
    { 
    array = 
    [ 
     "The year you pressed is \(currentYear)", 
    ] 
    } 
} 
currentYear = 2000 
+0

Bir viewController veya herhangi bir sınıfta değiller. Başka herhangi bir viewcontroller tarafından erişilebilen/erişilebilecek sınıfları olmayan ayrı bir dosyadalar. Ve daha önce işe yaramadı, aksi halde bu 'u yayınlamıyordum Açık olmak gerekirse, currentYears DOES değiştirir. Ama Array yapmaz. Cevabınızı şimdi deneyeceğim ama yine de – Jer

+0

Çözümünüz gayet iyi çalışıyor! Sadece bir getçi kullanmam gerekiyordu. DidSet değil. – Jer

1

deneyin :-) .. sadece bir deneyin gerçi bence bir yere ..Iam emin kıldı becoz, bunun için etiket değerini atamadan önce geçerli değişken ve dizi temizlemek için

+0

Bir yerde geçersiz kılınması doğruydu. CurrentYear’ı {var currentYear: Int! Olarak değiştirdim. } ve çalıştı. Bunun neden işe yaradığını bilmiyorum ama yine de işe yaradı. {Var currentYear = 2000} neden önce çalıştığını ve şimdi neden olmadığını da bilmiyorum. Her iki şekilde de yardım ettin. Teşekkürler! – Jer

+0

Daha sonra kodda sorun yaşıyorum. Duncans çözümünü denedikten sonra, sadece iyi çalıştı. – Jer

+0

kodunuz benim için çalıştı. seçilen cevap +1 olmalı – ashokdy

İlgili konular