问题描述
在SwiftUI文件的构造方法中,当我尝试根据selectedTab变量使用等号判断时,发现Binding类型无法转换为Int类型的错误。

init(selectedTab:Binding<Int>) {
// 修改待消除区域(模式为足球热区)
if selectedTab == 4 { // 报错行
let startColArea = colCount / 2 - 2
self.specialEliminationArea = [
(0...2).flatMap { row in
(startColArea...startColArea + 3).map { col in (row, col)}
},
(rowCount - 3...rowCount - 1).flatMap { row in
(2...5).map { col in (row, col) }
}
]
}
}
报错信息:
/Users/fangjunyu.com/Documents/iOS开发/iOS游戏-Faock/Faock/Faock/View/Game.swift:80:24 Referencing operator function '==' on 'BinaryInteger' requires that 'Binding<Int>' conform to 'BinaryInteger'
因为selectedTab是Binding<Int>类型,因此需要取出Binding里的值,才能解决这一问题。
提取Binding值需要使用 .wrappedValue:
if selectedTab.wrappedValue == 4 { }
问题得到解决。
总结
Binding本质是一个引用,指向外面的数据。因此,需要使用 .wrappedValue才能获取到具体的数据。如果不添加 .wrappedValue,Swift会认为在比较Binding<Int>和Int类型,所以就会提示类型不符。