2017-04-21 17 views
5

ऐसा लगता है कि मुझे ऐसी किसी समस्या के साथ समस्या हो रही है जो मामला नहीं होना चाहिए ... लेकिन मैं कुछ मदद मांगना चाहता हूं।'स्व' से पहले संपत्ति प्रारंभकर्ता चलाए जाते हैं

स्टैक मुझे यहां कुछ स्पष्टीकरण नहीं मिलते हैं।

दो सरल वर्गों के साथ जहां एक दूसरे को संदर्भित करता है, नीचे के अनुसार;

class User { 
    lazy var name: String = "" 
    lazy var age: Int = 0 

    init (name: String, age: Int) { 
     self.name = name 
     self.age = age 
    } 
} 

class MyOwn { 
    let myUser: User = User(name: "John", age: 100) 
    var life = myUser.age 
    //Cannot use instance member 'myUser' within property initializer 
    //property initializers run before 'self' is available 
} 

मुझे टिप्पणी संकलित त्रुटि मिलती है। कृपया कोई मुझे बताएं कि मामले को हल करने के लिए मुझे क्या करना चाहिए?

मदद के लिए किसी भी अच्छे व्यक्ति को बहुत धन्यवाद!

+2

कोड को एक विधि में रखें। आप गुणों को प्रारंभ नहीं कर सकते हैं जो कक्षा के शीर्ष स्तर पर एक दूसरे पर निर्भर करते हैं। या एक गणना संपत्ति का उपयोग करें। बीटीडब्ल्यू: 'उपयोगकर्ता' वर्ग में 'आलसी' विशेषताएं बेकार हैं। – vadian

+0

@vadian, आपकी मदद के लिए धन्यवाद। – RafalK

उत्तर

5

के रूप में सही ढंग से vadian द्वारा बताया आप इस तरह के परिदृश्य में एक init बनाना चाहिए:

class MyOwn { 
    let myUser: User 
    var life: Int 

    init() { 
     self.myUser = User(name: "John", age: 100) 
     self.life = myUser.age 
    } 
} 

आप एक संग्रहीत संपत्ति है कि एक और उदाहरण संपत्ति पर निर्भर करते हैं के लिए एक डिफ़ॉल्ट मान प्रदान नहीं कर सकते।

+1

यह निश्चित रूप से मेरी समस्याओं का उत्तर देता है। धन्यवाद! – RafalK

+0

आपका स्वागत है! आपके ऐप पर शुभकामनाएं ;-) –

2

आप इस तरह जीवन घोषित करना चाहिए:

lazy var life:Int = { 
    return self.myUser.age 
}() 

आप initialisation प्रक्रिया के दौरान एक और से एक ही प्रॉपर्टी (चर) आरंभ करने की कोशिश कर रहे हैं। इस समय चर उपलब्ध नहीं हैं।

+0

ठीक काम करना चाहिए, लेकिन उस ओवरकिल के लिए 'आलसी' का उपयोग नहीं कर रहा है? ;-) –

+1

@PauloMattos आपके उत्तर में प्रस्तुत कोड आर्किटेक्चर कम से कम मेरे लिए स्वीकार्य है। लेकिन मैं यह नहीं कह सकता कि एक व्यक्ति को आर्किटेक्चर की आवश्यकता क्यों है जिसे वह लागू करने की कोशिश कर रहा है। मैंने उसे दिखाया कि संकलन त्रुटियों के बिना इसे कैसे किया जाए और समझाया कि उसकी गलती क्या थी –

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