2015-11-04 6 views
7

में एक विशिष्ट चेतावनी को दबाने के लिए कैसे मैं एक स्विफ्ट समारोह कुछ इस तरह कर रही है। वास्तव में कौन सी रेखाएं चिह्नित की गई हैं, उस लक्ष्य पर निर्भर करती है जिसका मैं निर्माण कर रहा हूं (उदाहरण के लिए आईफोन 5 बनाम 6; रोचक रूप से आईफोन 5 64-बिट मामले के लिए चेतावनी देता है जबकि आईफोन 6 32-बिट और डिफ़ॉल्ट के लिए दो चेतावनियां देता है)।स्विफ्ट

मुझे पता चला कि #pragma के लिए स्विफ्ट बराबर // MARK: है, इसलिए मैं

// MARK: clang diagnostic push 
// MARK: clang diagnostic ignored "-Wall" 
func f() -> Int { 
    switch (__WORDSIZE) { 
     case 32: return 1 
     case 64: return 2 
     default: return 0 
    } 
} 
// MARK: clang diagnostic pop 

कोशिश की, लेकिन चेतावनी बने हुए हैं, MARK रों कोई असर नहीं लग रहे हैं।

समाधान के लिए, मैं अब कुछ इस तरह है:

#if arch(arm) || arch(i386) 
    return 1 
#else 
    #if arch(arm64) || arch(x86_64) 
     return 2 
    #else 
     return 0 
    #endif 
#endif 

- लेकिन निश्चित रूप से यह एक ही नहीं है। कोई संकेत ...?

+1

वर्तमान में, आप स्विफ्ट कोड में विशिष्ट चेतावनियों को दबा नहीं सकते हैं (उदाहरण के लिए http://stackoverflow.com/questions/31540446/how-to-silence-a-warning-in-swift-2-0) देखें। एक कामकाज के रूप में, आप इसके बजाय 'sizeof (Int.self)' पर स्विच कर सकते हैं (जो 4 या 8 है)। - यह जानना दिलचस्प होगा * क्यों * आपको इस फ़ंक्शन की आवश्यकता है। –

+0

धन्यवाद, आपका समाधान काम करता है। कोड के लिए, यहां देखें: http://stackoverflow.com/questions/24007129/how-does-one-generate-a-random-number-in-apples-swift-language - jstn द्वारा उत्तर। – Stefan

+1

मैंने इसे पहले नहीं देखा था, लेकिन यहां http://stackoverflow.com/a/31429991/1187415 एक (काफी समान) समाधान है जिसे शब्द आकार पर स्विच की आवश्यकता नहीं है। –

उत्तर

6

वर्तमान में (एक्सकोड 7.1), स्विफ्ट में एक विशिष्ट चेतावनी को दबाने का कोई तरीका नहीं है (उदाहरण के लिए How to silence a warning in swift देखें)।

अपने विशेष मामले में, आप बाइट्स की संख्या परिकलित एक शब्द में द्वारा संकलक मूर्ख कर सकते हैं:

func f() -> Int { 
    switch (__WORDSIZE/CHAR_BIT) { // Or: switch (sizeof(Int.self)) 
    case 4: return 1 
    case 8: return 2 
    default: return 0 
    } 
} 

यह दोनों 32-बिट और 64-बिट आर्किटेक्चर पर चेतावनी के बिना संकलित करता है।

+0

धन्यवाद, यह काम करता है! :-) – Stefan