2014-06-25 6 views
9

पृष्ठभूमि: ऑब्जेक्टिव-सी में, मैं अपने दावे को पैदा करेगा डिबग जानकारी के साथ शामिल:स्विफ्ट ज़ोर वैसे भी स्ट्रिंग में चर मुद्रित करने के लिए

NSAssert(poetCount > 5, "Expected poetCount > 5; Actual: %d", poetCount); 

हालांकि, स्विफ्ट में वैश्विक assert समारोह प्रतीत नहीं होता इसे अनुमति देने के लिए, क्योंकि संदेश पैरामीटर एक स्टेटिकस्ट्रिंग है। इसलिए मैं यह नहीं कर सकता:

assert(NSFileManager.defaultManager().fileExistsAtPath(fullpath), 
"Expected: File to Exist @ \(fullpath)") 

प्रश्न: वहाँ एक विकल्प assert समारोह है कि एक स्थिर स्ट्रिंग की आवश्यकता नहीं है, या मैं NSAssert का उपयोग जारी रखने अगर मैं अतिरिक्त जानकारी में डालने के लिए आसान डिबगिंग बनाना चाहते चाहिए ?

+0

यदि आप "उम्मीद ......" एक स्ट्रिंग वस्तुओं के साथ भाग की जगह क्या होता है? क्षमा करें, विंडोज़ पर, परीक्षण नहीं कर सकता। –

+0

@LordZsolt अगर मैं लिखता हूं 'assertString = "उम्मीद करें: सेक्शन इंडेक्स> 0; वास्तविक \ (सेक्शन इंडेक्स)"; जोर दें (सेक्शनइंडेक्स> 0, assertString) 'मुझे यह त्रुटि मिलती है: "' assert 'के लिए अधिभार नहीं मिला जो आपूर्ति किए गए तर्क स्वीकार करता है" – Tobias

+0

मुझे नहीं पता कि सेब ने इसे कब बदल दिया है लेकिन जोर अब स्ट्रिंग इंटरपोलेशन को संभाल सकता है। – Tobias

उत्तर

8

मुझे नहीं लगता कि आप वर्तमान में स्टेटिकस्ट्रिंग पैरा के कारण कर सकते हैं। मैंने संदेश स्ट्रिंग को चलो के साथ सेट करने का प्रयास किया लेकिन आप ऐसा लगता है कि वहां एक चर भी नहीं लगाया जा सकता है। यह उद्धरणों में एक स्टेटिकस्ट्रिंग होना चाहिए।

क्या इसके लायक है के लिए

, एप्पल के sample code एक ही पैटर्न इस प्रकार है:

assert(listItems && listItems!.count == 1, "There must be exactly one moved item.") 
+0

प्रतिक्रिया के लिए धन्यवाद। – Tobias

1

आप स्ट्रिंग के साथ ज़ोर से अपने स्वयं के संस्करण लिख सकते हैं। यहाँ उदाहरण है:

func assert(condition: @autoclosure() -> Bool, _ message: String = "") { 
    #if DEBUG 
     if !condition() { 
      println(message); 
       abort() 
     } 
    #endif 
} 

या अतिरिक्त डिबग जानकारी के साथ:

func assert(condition: @autoclosure() -> Bool, _ message: String = "", file: String = __FILE__, line: Int = __LINE__) { 
    #if DEBUG 
     if !condition() { 
      println("assertion failed at \(file):\(line): \(message)"); 
       abort() 
     } 
    #endif 
} 
संबंधित मुद्दे