<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><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">But if you do this you will get a different compiler error, because your struct will no longer conform to&nbsp;<span style="color: rgb(52, 149, 175); font-family: Menlo; font-size: 11px;" class="">Sequence</span>, which requires&nbsp;<span style="font-family: Menlo; font-size: 11px;" class="">makeIterator</span>&nbsp;to be non-mutating. This is important, especially assuming your array is eventually going to conform to&nbsp;<font face="Menlo" class="">Collection</font> as well. One of the requirements of collections is that they give an accurate count, but in the case of your array, the count returned might be different (greater) than the number of elements returned when you actually iterate the array, and this is not allowed (you may find that some standard library functions will trap when they discover that this has happened).</div></div></div></blockquote><br class=""></div><div>Btw, isn’t it strange that the next() method in `IteratorProtocol` *is* mutating, and makeIterator() is not?</div><br class=""></body></html>