2017-02-18 73 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.... 
      } 
相关问题