मैं ऐसा कुछ करने की कोशिश कर रहा था:

        #if DEBUG
            Color.black.edgesIgnoringSafeArea(.all)
        #else
            // render camera view
        #endif

लेकिन मैं वास्तव में ऐसा कुछ करना चाहता हूं:

        #if PREVIEW
            Color.black.edgesIgnoringSafeArea(.all)
        #else
            // render camera view
        #endif

मैं उम्मीद कर रहा था कि पूर्वावलोकन विंडो तब केवल काली पृष्ठभूमि प्रदर्शित करेगी (क्योंकि कैमरा पूर्वावलोकन में समर्थित नहीं है, निश्चित रूप से), और फिर जब मैं अपने भौतिक डिवाइस पर प्रोजेक्ट चलाता हूं तो कैमरा प्रदर्शित करने के लिए।

हालांकि, ऐसा प्रतीत होता है कि जब भी आप Release मोड में नहीं चल रहे हों तो DEBUG सत्य है। मैंने कंस्ट्रक्टर को false के डिफ़ॉल्ट के साथ isPreview पैरामीटर जोड़ने और true को व्यू के PreviewProvider के अंदर पास करने के बारे में सोचा था, लेकिन ऐसा करने के लिए यह एक पिछड़ा तरीका लगता है। .

क्या केवल पूर्वावलोकन के लिए #if DEBUG के बराबर है?

0
foxtrotuniform6969 12 जिंदा 2020, 21:27

1 उत्तर

सबसे बढ़िया उत्तर

मुझे यह पसंद नहीं है, लेकिन ऐसा प्रतीत होता है कि ऐसा करने का एक तरीका यह है कि एक फ़ाइल-व्यापी चर isPreview सेट किया जाए, इसे false पर तत्काल किया जाए और फिर इसे true के अंदर true में बदल दिया जाए। PreviewProvider की previews विधि, और फिर सशर्त रूप से मान के आधार पर दृश्य प्रस्तुत करें।

मान को त्वरित करें और इसे PreviewProvider के अंदर बदलें

fileprivate var isPreview = false

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        isPreview = true
        return MyView()
    }
}

और फिर इसे MyView के अंदर सशर्त रूप से प्रस्तुत करने के लिए उपयोग करें:

 if(isPreview) {
    // render only in preview
 } else {
   // render only in simulator and device
 }

मुझे आशा है कि कोई क्लीनर तरीका जानता है।

0
foxtrotuniform6969 13 जिंदा 2020, 15:03