<div dir="ltr">Rather than starting with extra keywords, what about adding an internal enum to the SequenceType and the forEach method signature:<br><br>protocol SequenceType {<div>  enum Result {</div><div>    case Break</div><div>    case Continue</div><div>  }</div><div><br></div><div>  ...</div><div><br></div><div>  func forEach(@noescape body: (Generator.Element) throws -&gt; Result?) rethrows</div><div><br></div><div>  ...</div><div>}</div><div><br></div><div>Then, in code:</div><div><br></div><div>sequence.forEach {</div><div>  x in</div><div><br></div><div>  if x.noMoreWork {</div><div>    return .Break</div><div>  }</div><div>  if x.notTheOneWeWant {</div><div>    return .Continue</div><div>  }</div><div><br></div><div>  print(&quot;Hooray, \(x)!&quot;)</div><div><br></div><div>  return nil</div><div>}</div><div><br>Given that Sequence and Generator/Iterator types are so tightly bound to the language syntax, it might be reasonable to add some syntactic sugar on top of this mechanism so that &quot;break&quot; and &quot;continue&quot; turn into the right return values.<br><br>Futher, if there were also a &quot;default return value&quot; concept for functions, we wouldn&#39;t even have to worry about explicitly returning nil.<br><br>func getAThingOrNot() -&gt; Thing? = nil {</div><div>  if let thing = weCanGetAThing() {</div><div>    return thing</div><div>  }</div><div><br></div><div>  // implicitly returns nil</div><div>}</div><div><br><br></div></div>