<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">This has been proposed before. The current implementation is intentional, as seen on the swift-evolution repo:&nbsp;<a href="https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#strings-characters-and-collection-types" class="">https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#strings-characters-and-collection-types</a>. This is why:&nbsp;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/002446.html" class="">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/002446.html</a></div><div class=""><br class=""></div>
&gt; Recently I’ve been considering the lack of safety around array indexes. Swift is designed with safety in mind, so this example would not compile:<br class="">&gt; <br class="">&gt; var myString: String? = “hello”<br class="">&gt; myString.append(“ world!”)<br class="">&gt; <br class="">&gt; The string is optional, not guaranteed to exist, so the last line requires a “!” to force-unwrap it.<br class="">&gt; <br class="">&gt; <br class="">&gt; <br class="">&gt; public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt;Int {<br class="">&gt; let section = self.sections[section]<br class="">&gt; <br class="">&gt; return section.items.count<br class="">&gt; }<br class="">&gt; <br class="">&gt; In this example, we could provide a section number that goes beyond the bounds of the self.sections array, without any warning.<br class="">&gt; <br class="">&gt; My suggestion is perhaps arrays should by default return an optional when given an index, and of course they’d support forced-unwrapping too. So you could then do this:<br class="">&gt; <br class="">&gt; let section = self.sections[section]<br class="">&gt; if section == nil {<br class="">&gt; return 0<br class="">&gt; } else {<br class="">&gt; return section!.items.count<br class="">&gt; }<br class="">&gt; <br class="">&gt; Or you could do this:<br class="">&gt; <br class="">&gt; let section = self.sections[section]!<br class="">&gt; <br class="">&gt; return section.items.count<br class="">&gt; <br class="">&gt; <br class="">&gt; <br class="">&gt; Of course this would be less convenient in a lot of cases, but this is the 1 place where apps seem to encounter a crash, crashing for the same reason that’s especially avoided across most of the rest of Swift._______________________________________________<br class="">&gt; swift-evolution mailing list<br class="">&gt; <a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">&gt; <br class="">&gt; <br class="">&gt;<span class="Apple-converted-space">&nbsp;</span>

</body></html>