2016-01-25 14 views
6

मैं वेक्टर कैलकुलेटर नामक एक स्थैतिक वर्ग बनाना चाहता हूं। शायद यह कार्य सिर्फ मेरे वेक्टर वर्ग में रखा जाना चाहिए (एनएसएसटींग की तरह - -stringByAppendingString ओब्जे-सी में विधि) ... और यदि आपको लगता है कि ... मुझे बताएं।मैं स्विफ्ट में एक स्थिर वर्ग कैसे बना सकता हूं?

वैसे भी मैं वेक्टर कैलक्यूलेटर नामक स्थिर वर्ग में कुछ स्थिर फ़ंक्शन जोड़ना चाहता हूं। यह 'डॉट उत्पाद' की गणना करेगा और एक वेक्टर लौटाएगा। एक और समारोह 'दो दिए गए वैक्टरों के बीच कोण की गणना और वापसी' की संभावना होगी।

ए) किसी को भी इस या

बी के लिए एक स्थिर वर्ग बनाने का यह तरीका अपनाते हैं चाहेंगे) मैं सिर्फ इस तरह के रूप ... public func dotProductWithVector(v: Vector) -> Vector और public func angleWithVector(v: Vector) -> Double वेक्टर वर्ग के उदाहरण के रूप में कार्य करता है इन कार्यों जोड़ना चाहिए। और फिर इन दोनों तर्क वैक्टर v वेक्टर वर्ग मुख्य वेक्टर u पर लागू किए जाएंगे।

या तो ए या बी जाने का क्या फायदा है?

यदि आपको बी लगता है, तो भविष्य के संदर्भ के लिए, क्या आप स्विफ्ट में सभी स्थिर वर्ग बनाएंगे?

+1

इस मदद कर सकता है आप http://en.swifter.tips/static-class/ –

+2

क्या है 'स्थिर वर्ग '? –

+0

मैं आपके दृष्टिकोण से बहुत उलझन में हूं। आपको स्थिर कक्षाओं की आवश्यकता क्यों है। –

उत्तर

6

गलत समझा अगर मैं तुम्हें सही ढंग से समझ लिया है आप मामले ए में प्रकार के तरीकों में रुचि रखते हैं आप विधि के func कीवर्ड से पहले स्थिर कीवर्ड लिखकर type methods इंगित करें। कक्षाएं क्लास कीवर्ड का भी उपयोग कर सकती हैं ताकि सबक्लास को उस विधि के सुपरक्लास के कार्यान्वयन को ओवरराइड करने की अनुमति मिल सके। (सी)

struct Vector { 
     var x, y, z: Int 
    } 

    class VectorCalculator { 
     static func dotProductOfVector(vec1: Vector, withVector vec2: Vector) -> Vector { 
      let newX = //calc x coord; 
      let newY = //calc y coord;; 
      let newZ = ////calc z coord;; 
      return Vector(x: newX,y: newY, z: newZ); 
     } 
    } 

let vec1 = Vector(x:1, y:2, z:3) 
let vec2 = Vector(x:4, y:5, z:6) 
let v = VectorCalculator.dotProductOfVector(vec1, withVector: vec2) 

बी के लाभ के रूप में यह आपके द्वारा हल किए गए कार्यों पर निर्भर करता है। यदि आप मूल वैक्टरों को अनमोडिफाइड करना चाहते हैं तो यह एक संस्करण का उपयोग करने के लिए अधिक सुविधाजनक है। लेकिन मुझे लगता है कि आप दोनों प्रकार की कार्यक्षमता प्रदान कर सकते हैं।

+0

धन्यवाद! क्या आप इस बिट के त्वरित वाक्यविन्यास को समझा सकते हैं ... '(_: वेक्टर,)'? –

+0

@chrisP निश्चित रूप से। असल में यह घोषणा सही नहीं थी, इसलिए मैंने अपना जवाब संपादित कर लिया है। विधि के शरीर में पास पैरामीटर का उपयोग करने में सक्षम होने के लिए, पैरामीटर में स्थानीय पैरामीटर नाम होना चाहिए उदा। 'func विधि (लोकलनाम फर्स्ट: वेक्टर, लोकलनाम सेकेंड: वेक्टर) {}'। बाहरी पैरामीटर भी हैं। वे लेबल की तरह हैं जो आपके कोड की पठनीयता बढ़ाते हैं। मेरे जवाब में यह लेबल (बाहरी पैरामीटर) _withVector_ है। यह [यहां] (http://example.com) "अनुभाग के लिए स्थानीय और बाहरी पैरामीटर नाम" खंड में समझाया गया है। – curious

+0

@ क्रूर यह मैं गलत या स्विफ्ट उस के बारे में बदल गया? यदि आपके पास पैरामीटर का केवल एक नाम है, तो यह आपके पहले तर्क को फ़ंक्शन के आवश्यक नाम पैरामीटर के रूप में कार्य करता है: 'वेक्टर कैलकुलेटर डॉट प्रोडक्टऑफ वेक्टर (vec1: vec1, withVector: vec2)' पहले पैरामीटर को अनुमति देने के लिए नहीं नामित करने के लिए, आपको फ़ंक्शन हेडर में तर्क की घोषणा करना होगा: 'स्थिर func dotProductOfVector (_ vec1: वेक्टर, साथ वेक्टर 2: वेक्टर) -> वेक्टर'। शायद इसके बारे में स्विफ्ट बदल गया? मैं अभी भी सीख रहा हूं, लेकिन चीजों को आजमाते समय यह सही तरीका प्रतीत होता है। – modiX

1

मुझे लगता है कि आप क्या देख रहे हैं कक्षा कार्य हैं? शायद आपका उत्तर यहां पाया जा सकता है। How do I declare a class level function in Swift?

class Foo { 
    class func Bar() -> String { 
     return "Bar" 
    } 
} 

Foo.Bar() 

स्विफ्ट 2.0 में आप वर्ग के बजाय आंकड़े कीवर्ड का उपयोग कर सकते हैं। लेकिन आप structs और कक्षाओं

के लिए वर्ग कीवर्ड के लिए स्थिर कीवर्ड का उपयोग करना चाहिए

// संपादित अभी देखा है कि मैं ठीक से अपने प्रश्न

5

कैसे क्या आप स्विफ्ट में सभी स्थिर वर्ग बनाएंगे?

static कोई उदाहरण का मतलब है, तो मैं यह कोई प्रारंभकर्ता के साथ एक struct बनाना होगा:

struct VectorCalculator { 
    @available(*, unavailable) private init() {} 

    static func dotProduct(v: Vector, w: Vector) -> Vector { 
     ... 
    } 
} 
संबंधित मुद्दे