2015-03-09 19 views
5

मुझे जन्म तिथि से उम्र नहीं मिल सकती है। क्या मुझे मिल गयाजन्म तिथि से उम्र की गणना

fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb) 

है मेरे कोड

override func viewDidLoad() { 
     super.viewDidLoad() 
var dateString = user.birthday 
     var dateFormatter = NSDateFormatter() 
     // this is imporant - we set our input date format to match our input string 
     dateFormatter.dateFormat = "dd-MM-yyyy" 
     // voila! 
     var dateFromString = dateFormatter.dateFromString(dateString) 

     let age = calculateAge(dateFromString!) 
} 

func calculateAge (birthday: NSDate) -> NSInteger { 

     var userAge : NSInteger = 0 
     var calendar : NSCalendar = NSCalendar.currentCalendar() 
     var unitFlags : NSCalendarUnit = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay 
     var dateComponentNow : NSDateComponents = calendar.components(unitFlags, fromDate: NSDate()) 
     var dateComponentBirth : NSDateComponents = calendar.components(unitFlags, fromDate: birthday) 

     if ((dateComponentNow.month < dateComponentBirth.month) || 
      ((dateComponentNow.month == dateComponentBirth.month) && (dateComponentNow.day < dateComponentBirth.day)) 
      ) 
     { 
      return dateComponentNow.year - dateComponentBirth.year - 1 
     } 
     else { 
      return dateComponentNow.year - dateComponentBirth.year 
     } 
    } 
+0

जो लाइन पर आप त्रुटि मिलता है? और डेटस्ट्रिंग की सामग्री क्या है? –

+0

सबसे अधिक संभवतः 'उम्र = गणना गणना करें (dateFromString!)' इस समस्या का कारण बन जाएगा। 'डेटस्ट्रिंग' में –

उत्तर

21

अद्यतन: Xcode 8.2.1 • स्विफ्ट 3.0.2

extension Date { 
    var age: Int { 
     return Calendar.current.dateComponents([.year], from: self, to: Date()).year! 
    } 
} 

let myDOB = Calendar.current.date(from: DateComponents(year: 1970, month: 9, day: 10))! 

let myAge = myDOB.age  // 46 

Xcode 7.2 • स्विफ्ट 2.1.1

आप एनएससीएंडरडर विधि सी का उपयोग कर सकते हैं omponents पालन आज के लिए एक विशिष्ट तिथि से कितने साल की गणना करने के:

extension NSDate { 
    var age: Int { 
     return NSCalendar.currentCalendar().components(.Year, fromDate: self, toDate: NSDate(), options: []).year 
    } 
} 

let myDOB = NSCalendar.currentCalendar().dateWithEra(1, year: 1970, month: 09, day: 10, hour: 0, minute: 0, second: 0, nanosecond: 0)! 
let myAge = myDOB.age  // 46 
+0

क्या है, यह जानने के बिना समाधान का सुझाव देना मुश्किल है क्या आप मुझे पूरा कोड –

+0

दिखा सकते हैं तो आपका अपडेट कोड कैसा है? –

+0

स्विफ्ट 2 @ स्विफ्ट आर्किटेक्ट में कैसे प्राप्त करें? – NiKKi

0

स्विफ्ट में 2.0+ उम्र कंप्यूटिंग कोड कुछ इस तरह दिखना चाहिए:

extension NSDate { 
    var age:Int { 
     return NSCalendar.currentCalendar() 
      .components(NSCalendarUnit.Year, 
         fromDate: self, 
         toDate: NSDate(), 
         options: NSCalendarOptions(rawValue: 0) 
      .year 
    } 
} 
-1

बस DateTools फली का उपयोग करें। बिल्कुल सबसे आसान तरीका। https://github.com/MatthewYork/DateTools

स्विफ्ट 3

लिए

import DateTools 

let birthday: Date = .... 
let ageString = String((Date() as NSDate).years(from: birthday)) 
2

महत्वपूर्ण:

समय क्षेत्र एक यूटीसी जन्म तिथि बनाने के लिए नहीं तो वहाँ समय-क्षेत्रों के बीच विसंगतियों हो जाएगा स्थापित होना चाहिये।

स्विफ्ट 3

extension Date { 

    //An integer representation of age from the date object (read-only). 
    var age: Int { 
     get { 
      let now = Date() 
      let calendar = Calendar.current 

      let ageComponents = calendar.dateComponents([.year], from: self, to: now) 
      let age = ageComponents.year! 
      return age 
     } 
    } 

    init(year: Int, month: Int, day: Int) { 
     var dc = DateComponents() 
     dc.year = year 
     dc.month = month 
     dc.day = day 

     var calendar = Calendar(identifier: .gregorian) 
     calendar.timeZone = TimeZone(secondsFromGMT: 0)! 
     if let date = calendar.date(from: dc) { 
      self.init(timeInterval: 0, since: date) 
     } else { 
      fatalError("Date component values were invalid.") 
     } 
    } 

} 

उपयोग:

let dob = Date(year: 1975, month: 1, day: 1) 
let age = dob.age 

print(age) 
संबंधित मुद्दे