ios 如何在SwiftUI View中为初始化器中的@Binding分配默认值或空值?

kgsdhlau  于 2023-03-31  发布在  iOS
关注(0)|答案(1)|浏览(174)

我的观点很简单:

import SwiftUI

struct CategoryElementView: View {
    @Binding var selectedCategory: String?
    private let category: String
    private let isSelectable: Bool
    
    private var isSelected: Bool {
        !isSelectable || category == selectedCategory
    }

    init(category: String, selectedCategory: Binding<String?>) {
        self.category = category
        self.isSelectable = true
        self._selectedCategory = selectedCategory
    }
    
    init(category: String) {
        self.category = category
        self.isSelectable = false
        self._selectedCategory = category 
        // ❌ Cannot assign value of type 'String' to type 'Binding<String?>'
    }
}

我的目的是什么?我需要使用相同的视图用于2种模式:选择它(selectable == true),只显示它(selectable == false)。如果没有选择,就不需要从外部绑定了。怎么做呢?Nil也会在这里产生错误。

gr8qqesn

gr8qqesn1#

这是构建预览时的一种常见情况,您希望注入常量值而不是绑定。您应该能够使用相同的方法:

self._selectedCategory = .constant(category)

它也应该与nil一起工作。

self._selectedCategory = .constant(nil)

在你的例子中,你甚至可以使用一个构造函数:

init(category: String, selectedCategory: Binding<String?>? = nil) {
    self.category = category
    self.isSelectable = selectedCategory != nil
    self._selectedCategory = selectedCategory ?? .constant(category)
}

相关问题