我使用变量j在延迟块中打印其最终值,如下所示:
func justForFun()
{
defer {let x = j; print("\(x)")}
var j = 0
for i in 1...5
{
print("\(i)")
j = i*2;
}
}
justForFun()
因此,确实在延迟块内读取和打印变量 j 。尽管如此,PlayGround还是会显示变量j被写入但从未读过的警告。有没有办法启发编译器并消除此警告?
答案 0 :(得分:2)
如果变量声明移到defer
以上,则警告消失。
$ cat d.swift
func justForFun() {
var j = 0
defer {let x = j; print("\(x)")}
for i in 1...5 {
print("\(i)")
j = i*2;
}
}
justForFun()
$ swift d.swift
1
2
3
4
5
10
虽然这并没有解释为什么警告出现,但它确实回答了如何使警告消失。
就启发编译器而言,我认为你无法做到这一点。您可能希望在swift.org上提交和发布;请参阅this page了解如何报告错误。似乎静态流检查器没有查看defer
语句,我相信它应该是。很好找。
答案 1 :(得分:1)
添加匿名作业// Swift 3.0
func justForFun()
{
defer {let x = j; print("\(x)")}
var j = 0
// anonymous assignment:
_ = j
for i in 1...5
{
print("\(i)")
j = i*2;
}
}
justForFun()
会消除警告:
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=(Paste YOUR API KEY)"></script>