2014-08-30 12 views
9

मैं एक नई कक्षा में काम कर रहे एक स्विफ्ट खेल के मैदान के साथ खेल रहा हूं। किसी कारण से मुझे एक त्रुटि मिलती है कि कक्षा में पहले सदस्य परिभाषित तीन पंक्तियों के नाम के साथ "सदस्य प्रकार नहीं है"। यहाँ कोड है:प्रकार में कोई सदस्य नहीं है

import Foundation 
class DataModel { 
    let myCalendar = NSCalendar.autoupdatingCurrentCalendar() 

    var myData = [NSDate : Float]() 
    let now = NSDate() 
    let components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now) 
} 

Xcode Beta6 हुए कहा कि "DataModel.Type एक सदस्य नामित नहीं है मुझे अंतिम पंक्ति के बाद दूसरे स्थान पर एक त्रुटि दे रहता है, 'myCalendar'

हालांकि मुझे नहीं पता मुझे लगता है कि इसे एक अंतर बनाना चाहिए, मैंने varCalendar को var के रूप में परिभाषित करने का प्रयास किया है।

उत्तर

8

आप एक ही कक्षा की दूसरी इंस्टेंस प्रॉपर्टी का संदर्भ देने वाली एक इंस्टेंस क्लास प्रॉपर्टी प्रारंभ नहीं कर सकते हैं, क्योंकि इसकी गारंटी नहीं है कि किस क्रम में उन्हें प्रारंभ किया जाएगा - और तेज़ उस पर प्रतिबंध लगाता है, इसलिए (भ्रामक) कंपाइलर त्रुटि।

आप इस प्रकार एक निर्माता में प्रारंभ बढ़ना है:

let components: NSDateComponents 

init() { 
    self.components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now) 
} 
+0

एक आकर्षण की तरह काम किया। धन्यवाद, एंटोनियो! – user1790252

1

मैं @Antonio से सहमत दूसरी तरह struct बनाने के लिए हो सकता है आप का उपयोग नहीं करना चाहते हैं, तो init:

class DataModel { 

    struct MyStruct { 
     static var myCalendar:NSCalendar = NSCalendar.autoupdatingCurrentCalendar() 
     static let now = NSDate() 
    } 

    var myData = [NSDate : Float]() 

    var components = MyStruct.myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: MyStruct.now) 
} 

टेस्ट

var model:DataModel = DataModel() 
var c = model.components.year // 2014 
+0

यह भी काम किया; मैंने @ एंटोनियो के उत्तर को केवल सही के रूप में चिह्नित किया क्योंकि यह मेरी समग्र परियोजना के साथ बेहतर तरीके से फिट बैठता है। धन्यवाद! – user1790252

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