Swift-闭包是引用类型
发布时间:2020-12-14 07:19:20 所属栏目:百科 来源:网络整理
导读:闭包是引用类型 p class="p1"span class="s1"///spanspan class="s2"下面是一个使用/spanspan class="s1"makeIncrementor/spanspan class="s2"的例子/span/pp class="p2"span class="s3"let/spanspan class="s1" incrementByTen = /spanspan class="s4"makeI
闭包是引用类型 <p class="p1"><span class="s1">//</span><span class="s2">下面是一个使用</span><span class="s1">makeIncrementor</span><span class="s2">的例子</span></p><p class="p2"><span class="s3">let</span><span class="s1"> incrementByTen = </span><span class="s4">makeIncrementor</span><span class="s1">(forIncrement: 10)</span></p><p class="p3"><span class="s1">incrementByTen</span><span class="s5">()</span></p><p class="p3"><span class="s1">incrementByTen</span><span class="s5">()</span></p><p class="p3"><span class="s1">incrementByTen</span><span class="s5">()</span></p><p class="p4"><span class="s1"></span> </p><p class="p5"><span class="s6">//</span><span class="s1">如果创建了另一个</span><span class="s6">incrementor</span><span class="s1">,它会有属于他自己的一个全新、独特的</span><span class="s6">runningTotal</span><span class="s1">变量的引用:</span></p><p class="p2"><span class="s3">let</span><span class="s1"> incrementBySeven = </span><span class="s4">makeIncrementor</span><span class="s1">(forIncrement: 7)</span></p><p class="p3"><span class="s1">incrementBySeven</span><span class="s5">()</span></p><p class="p3"><span class="s1">incrementBySeven</span><span class="s5">()</span></p><p class="p4"><span class="s1"></span> </p><p class="p4"><span class="s1"></span> </p><p class="p3"><span class="s1">incrementByTen</span><span class="s5">()</span></p><p class="p3"><span class="s1">incrementBySeven</span><span class="s5">()</span></p><p class="p5"><span class="s6">//</span><span class="s1">所以闭包捕获值时所捕获的变量或常量是没有关系的</span></p> incrementByTen,incrementBySeven是常量,但是这些常量指向的闭包仍然可以增加其捕获的变量的值。这是因为函数和闭包都是引用类型。 //所以无论您将函数或闭包赋值给一个常量还是变量,实际上都是将常量或变量的值设置为对应函数或闭包的引用。 //指向闭包的引用是一个常量,而并非闭包内容本身 //如果将闭包赋值给两个不同的常量或变量,两个值都会指向同一个闭包。 let alsoIncrementByTen = incrementByTen alsoIncrementByTen() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |