swift - Xcode खेल के मैदानों स्रोत फ़ाइलों में स्विफ्ट फ़ाइलों का उपयोग नहीं कर सकते




swift-playground xcode6.3 (2)

खेल के मैदान रनिंग टेस्ट के लिए अच्छे हैं। अपने सभी कोड को Sources निर्देशिका में रखें और प्रत्येक परीक्षण के लिए सार्वजनिक रूप से सुलभ 'परीक्षण' वर्ग रखें। फिर खेल के मैदान से सार्वजनिक रूप से सुलभ परीक्षण चलाएं।

playground

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

Sources/Test1.swift

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

Sources/MyClass.swift

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

मैं अभी Xcode 6.3 में अपग्रेड हुआ और उन्होंने प्लेग्राउंड में कुछ नया पेश किया। यदि आप एक नया खेल का मैदान बनाते हैं और आप प्रोजेक्ट नेविगेटर खोलते हैं, तो आपको एक स्रोत फ़ोल्डर दिखाई देगा और उसके अंदर एक "SupportCode.swift" फ़ाइल है। उस फ़ाइल के शीर्ष पर वह पढ़ता है

इस फ़ाइल (और इस खेल के मैदान के स्रोत में अन्य सभी स्विफ्ट स्रोत फाइलें) को एक फ्रेमवर्क में precompiled जाएगा, जो स्वचालित रूप से उपलब्ध है।

मैंने वहाँ एक समारोह लगाने की कोशिश की और यह मेरे खेल के मैदान के लिए उपलब्ध नहीं है। मैं क्या गलत कर रहा हूं? क्या मुझे मैन्युअल रूप से SupportCode.swift फ़ाइल को मैन्युअल रूप से संकलित करना है? कैसे?


जैसा कि जब आप बनाते हैं। स्रोत फ़ोल्डर में .swift फ़ाइलें बनाते समय वे आपके खेल के मैदान कोड के लिए स्वचालित रूप से उपलब्ध होती हैं। इस फ़ाइल के विभिन्न हिस्सों की पहुँच को नियंत्रित करने के लिए आप एक्सेस स्तर संशोधक का उपयोग कर सकते हैं जो हैं: public , internal और private

स्विफ्ट प्रोग्रामिंग भाषा अभिगम नियंत्रण के अनुसार

अधिकांश मामलों में डिफ़ॉल्ट एक्सेस स्तर internal जो मॉड्यूल के अंदर पहुंच योग्य है, लेकिन बाहर नहीं।

दूसरे शब्दों में, यदि आप एक्सेस मॉडिफायर के बिना एक वर्ग घोषित करते हैं, तो आप इसे स्रोत फ़ोल्डर में किसी अन्य फ़ाइल से एक्सेस कर सकते हैं, लेकिन अपने खेल के मुख्य फ़ाइल में नहीं। दूसरे हाथ में अगर आप सार्वजनिक संशोधक के साथ एक वर्ग की घोषणा करते हैं तो आप इसे दोनों मामलों में एक्सेस कर सकते हैं।

व्यावहारिक उपयोग के लिए: आइए एक सिंगलटन कार्यान्वयन लागू करें: मैं निम्नलिखित कोड के साथ 'Singy.swift' नाम के स्रोत फ़ोल्डर में एक नई फ़ाइल बनाता हूं:

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!
    }
}

दूसरा: मेरे खेल के मैदान से

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

s1 और s2 दोनों एक ही उदाहरण को संदर्भित करते हैं, लेकिन यह केवल कक्षा के भीतर बनाया गया है