2016-03-22 10 views
5

में इस बिंदु उदाहरण पेश किया पिंट संरचना सेटर apple द्वारा प्रदान की गेटर है कैसे कर सकते हैं केवल सेटर निजीनिजी सेटर "सेट()" स्विफ्ट

struct Point { 
    var x = 0.0, y = 0.0 
} 
struct Size { 
    var width = 0.0, height = 0.0 
} 
struct Rect { 
    var origin = Point() 
    var size = Size() 
    var center: Point { 
     get { 
      let centerX = origin.x + (size.width/2) 
      let centerY = origin.y + (size.height/2) 
      return Point(x: centerX, y: centerY) 
     } 
     set(newCenter) { 
      origin.x = newCenter.x - (size.width/2) 
      origin.y = newCenter.y - (size.height/2) 
     } 
    } 
} 
+2

क्या आप केंद्र प्राप्त करने में सक्षम होना चाहते हैं लेकिन इसे सीधे सेट नहीं करना चाहते हैं? क्या यही है? –

+0

हाँ, आप सही हैं –

+1

ठीक है, मैंने अपना जवाब यह नहीं छोड़ा है कि यह आपके इच्छित चीज के अनुरूप हो सकता है। 'निजी (सेट)' का उपयोग करने का दूसरा जवाब भी काम कर सकता है लेकिन जैसा कि संकेत दिया गया है कि यह आपके विचार से अलग तरीके से काम करता है। चूंकि आप केंद्र संपत्ति को सेट करने में सक्षम नहीं होना चाहते हैं, इसलिए केंद्र के लिए गणना की गई संपत्तियों का उपयोग करना सबसे अच्छा तरीका है। उम्मीद है कि यह –

उत्तर

1

आप निम्नानुसार संरचना संदर्भ को परिष्कृत कर सकते हैं। यह आपको केवल केंद्र प्राप्त करने की अनुमति देगा लेकिन इसे सेट नहीं करेगा।

struct Rect { 

    var center:Point { 
     let centerX = origin.x + (size.width/2) 
     let centerY = origin.y + (size.height/2) 
     return Point(x: centerX, y: centerY) 
    } 

    var origin = Point() 
    var size = Size() 
} 
12

docs में, शीर्षक के अंतर्गत पहले कोड नमूने में " getters और setters "आपको लगता है कि एक निजी सेटर के लिए देख सकते हैं, वाक्य रचना इस तरह दिखता है:

private (set) var center: Point {... 

कुछ स्पष्टीकरण: स्विफ्ट में private थोड़ा अलग तरह से काम करता है - यह उचित करने के लिए उपयोग को सीमित करता है एक फ़ाइल के दायरे के लिए ty/विधि। जब तक फ़ाइल में एक वर्ग अधिक हो, तब तक वे अपनी सभी सामग्री तक पहुंच पाएंगे। private "काम करने के लिए" के लिए, आपको अपनी कक्षा को अलग-अलग फाइलों में रखना होगा।

+0

में मदद करता है यह वास्तविक परियोजना में नहीं, बल्कि खेल के मैदान में कोई चेतावनी नहीं देता है। मैं 'प्वाइंट' को 'सेंटर' प्रॉपर्टी पर सेट कर सकता हूं। –

+5

'निजी' स्विफ्ट में थोड़ा "अलग" काम करता है - यह * फ़ाइल * के दायरे में संपत्ति/विधि के उपयोग को सीमित करता है। तो खेल के मैदान में आप एक सच्ची निजी संपत्ति प्राप्त नहीं कर सकते (कम से कम मुझे नहीं पता कि कैसे)। वास्तविक परियोजनाओं में आपको अपनी कक्षाओं को अलग-अलग फाइलों में रखना चाहिए - जब तक आपके पास एक फ़ाइल में दो कक्षाएं हों, वे अपनी सभी संपत्तियों/विधियों तक पहुंच सकते हैं। – Losiowaty

+1

धन्यवाद, यह वही है जो मैं सोच रहा था। –

संबंधित मुद्दे