[英]"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.