2015-04-14 18 views
31

Sadece Xcode 6.3 sürümüne geçtim ve Playgrounds için yeni bir şey sundular. Yeni bir oyun alanı oluşturursanız ve proje gezginini açarsanız, bir Sources klasörünü görürsünüz ve bunun içinde bir "SupportCode.swift" dosyası bulunur. o dosyanın en üstünde ben orada hiç bir işlev koyarak çalıştıXcode oyun alanları, Kaynaklar klasöründe hızlı dosyalara erişemiyor

This file (and all other Swift source files in the Sources directory 
of this playground) will be precompiled into a framework which is 
automatically made available to <PLAYGROUND_NAME>.playground. 

okur ve bu benim oyun alanına kullanılamaz. Neyi yanlış yapıyorum? SupportCode.swift dosyasını el ile elle derlemek zorunda mıyım? Nasıl?

cevap

99

Sen .swift oluştururken belirtildiği gibi onlar derleyici

+12

public class Test1 { public static func run() { let my_class = MyClass() let result = my_class.do_something() print(result) } } 

Sources/Test1.swift

Test1.run() Testx.run() ... 

playground

Ben gerçekten garip bir sınıf kamuoyuna VE onun init fonksiyonu genel yapmak zorunda olduğunu bulmak. – DerrickHo328

+6

, oyun alanlarının – dreamlab

+1

@ @ Calimari328 için @testable içe aktarma türü gibi bir şey yapması durumunda harika olur. Sizi herkese açık olarak görünür kılarken, dışarıda görünmesini (örnek oluşturması) sağlayan init() öğesini genel olarak açıklar. Bu yüzden sınıfa bir erişim vermek istediğinizde, ancak aynı zamanda örneklemeyi sınırlamak istediğinizde - init() öğesini daha az görünür olarak bildirirsiniz. Singleton uygulaması ile bir örnek verdim - daha net hale getirmek için –

6

tarafından ayrı modül olarak ele ana oyun alanı dosyasından bunları erişilebilir hale getirmek için kaynak klasörde sınıfları, yöntemleri ve özellikleri kamu erişimi özelliğini eklemek zorunda Kaynak klasöründeki dosyalar oyun alanınızın koduna otomatik olarak erişilir. Bu dosyanın farklı bölümlerinin erişimini denetlemek için Erişim düzeyi değiştiricilerini kullanabilirsiniz: public, internal & private. çoğu durumda Swift programming language access control

varsayılan erişim seviyesi göre

internal modül içinde erişilebilir değil dışındadır. Başka bir deyişle, erişim düzenleyicisi olmayan bir sınıfı bildirirseniz, kaynak klasöründeki başka bir dosyadan erişebilir, ancak oyun alanının ana dosyasında bulunamazsınız. diğer taraftan, genel değiştiricili bir sınıf bildirirseniz, her iki durumda da erişebilirsiniz. Pratik kullanım için

: my oyun

den : İkinci

public class Singy{ 
public var name=""; 
private static var instance:Singy?; 
private init(){ 

} 
public static func getSingy()->Singy{ 
    if Singy.instance==nil{ 
     Singy.instance=Singy(); 
    } 
    return Singy.instance!; 
}} 

: Ben 'Singy.swift' aşağıdaki kodla adında Kaynak klasöründe yeni bir dosya oluşturmak: en bir Singleton uygulanması İlk yapalım

var s1=Singy.getSingy(); var s2=Singy.getSingy(); s1.name="One"; print(s2.name); 

hem & s2 aynı örneği referans S1, ama sadece sınıf içinde oluşturulan

12

Oyun alanları koşu testleri için iyidir. Tüm kodunuzu Sources dizinine koyun ve her bir test için herkese açık bir 'test' sınıfına sahip olursunuz. Ardından oyun alanından herkese açık testler yapın. Sources/MyClass.swift

class MyClass { 
    func do_something() -> String { 
    return "lol" 
    } 
} 
+0

Bu gerçekten paha biçilemez. Bunu nasıl yapmayı öğrendin? – Confused

İlgili konular