2017-02-18 77 views
-1

下面的代碼有以下錯誤:Missing return in a function expected to return 'String'爲什麼它不能返回到其他地方?

var description: String { 
    get{ 
     if(pending == nil){ 
      return "a" 
     } 
     else{ 
      if let op = internalProgram.last as? String{ 
       if operations[op] != nil { 
        return "b" 
       } 
      } 
      else { 
       return "c" 
      } 
     } 
    } 
} 

但是,如果我刪除最後一個else和簡單地離開return "c",它工作正常。

var description: String { 
    get{ 
     if(pending == nil){ 
      return "a" 
     } 
     else{ 
      if let op = internalProgram.last as? String{ 
       if operations[op] != nil { 
        return "b" 
       } 
      } 
      return "c" 
     } 
    } 
} 

爲什麼第一個代碼不工作?他們有沒有相同的功能?兩者都不會達到最後的回報聲明?在第一個代碼中,如果其他所有內容都不起作用,則最後一個return語句將被執行。

+2

那麼,如果'op [op]'是'nil'呢?第一個代碼不會返回任何東西。 – JJJ

+0

@JJJ該死的,我很蠢。謝謝 –

回答

0

因爲你沒有錯過任何一個條件,如果operations[op] == nil

var description: String { 
    get{ 
     if(pending == nil){ 
      return "a" 
     } 
     else{ 
      if let op = internalProgram.last as? String{ 
       if operations[op] != nil { 
        return "b" 
       } 
       // what's the return value here? 
      } 
      else { 
       return "c" 
      } 
     } 
    } 
} 

在另一方面,可以縮短你的代碼,使其更具可讀性人類和機器一樣:

var description: String { 
    if pending == nil { 
     return "a" 
    } else if let op = internalProgram.last as? String, operations[op] != nil { 
     return "b" 
    } else { 
     return "c" 
    } 
} 
1

對於操作[op]爲零的情況,您不返回任何內容。

if let op = internalProgram.last as? String{ 
       if operations[op] != nil { 
        return "b" 
       } else { 
// return something else here.... 
      } 
相關問題