簡體   English   中英

“無法強制展開非可選類型‘Int’的值”錯誤?

[英]"Cannot force unwrap value of non-optional type 'Int'" error?

func decideLeapYear(year: Int) -> Bool{
var lyear: Bool = false
  if(year<1582){
    if(((year/4)%1)==0){
        lyear = true
    }
  }
  else if(year>=1582)
  {
    if(((year%4)==0) || (year%400==0) && ((year%100)!=0)){
      lyear = true
    }
  }

return lyear
}

else if語句中的if語句末尾,Xcode 拋出此錯誤:

無法強制展開非可選類型“Int”的值

當它到達語句時:

((year%100)!=0))

誰能解釋為什么以及如何解決這個問題?

這是因為編譯器認為((year%100)!=0))實際上是((year%100)! = 0)) ,因此嘗試解包(year%100)! .

解決方案是在!=之前添加一個空格:

func decideLeapYear(year: Int) -> Bool{
    var lyear: Bool = false
    if(year<1582){
        if(((year/4)%1)==0){
            lyear = true
        }
    }

    else if(year>=1582)
    {
        if(((year%4)==0) || (year%400==0) && ((year%100) != 0)) {
            lyear = true
        }
    }

    return lyear
}

另外,請注意:您不需要將條件括在括號中,並且代碼中的空格字符不需要任何費用。 所以我建議在你的代碼中添加一些空氣,如下所示:

func decideLeapYear(year: Int) -> Bool {
    if year < 1582 {
        if (year / 4) % 1 == 0 {
            return true
        }
    } else if year >= 1582 {
        if year % 4 == 0 || year % 400 == 0 && year % 100 != 0 {
            return true
        }
    }
    return false
}

我還刪除了 bool 變量以使代碼更簡潔。

func isLeapYear(year:Int) -> Bool {
    return year < 1582 ?  year % 4 == 0 : year % 4 == 0 && (year % 100 != 0 || (year % 400 == 0))
}


isLeapYear(2000)   // true
isLeapYear(2400)   // true
isLeapYear(1800)   // false
isLeapYear(1900)   // false
isLeapYear(2100)   // false
isLeapYear(2200)   // false
isLeapYear(2300)   // false
isLeapYear(2500)   // false

isLeapYear(2008)   // true
isLeapYear(2012)   // true
isLeapYear(2016)   // true

isLeapYear(2017)   // false
isLeapYear(2018)   // false
isLeapYear(2019)   // false
isLeapYear(2020)   // true

或作為NSDate擴展:

extension NSDate {
    var year: Int {
        return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Year, fromDate: self)
    }
    var isLeapYear: Bool {
        return  year < 1582 ?  year % 4 == 0 : year%4 == 0 && (year%100 != 0 || (year%400 == 0))
    }
}

NSDate().isLeapYear   // false

NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.dateWithEra(1, year: 2016, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0)!.isLeapYear    // true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM