@将init与类绑定

时间:2019-09-19 12:36:46

标签: swiftui

我想使用类中的@State初始化结构中的@Binding。

请参见代码中的注释“ //问题在这里”。我尝试过:

$junk = model.$junk
junk = model.$junk
junk = model.junk   

这会编译...

import SwiftUI

struct Junk_Test: View {
    @Binding var junk: String

    var body: some View {
        Text("\(junk)")
    }
}


class JunkModel {
    @State var junk = "xyz"
}


struct Junk_Test_Previews: PreviewProvider {
    static var previews: some View {
        Junk_Test(junk: JunkModel().$junk)
    }
}

这不能编译...

import SwiftUI

struct Junk_Test: View {
    @Binding var junk: String

    init(model: JunkModel) {
        $junk = model.$junk  // problem here
    }


    var body: some View {
        Text("\(junk)")
    }
}


class JunkModel {
    @State var junk = "xyz"
}


struct Junk_Test_Previews: PreviewProvider {
    static var previews: some View {
        Junk_Test(model: JunkModel())
    }
}

我认为这些都可以编译。有办法吗?

2 个答案:

答案 0 :(得分:0)

$junk在访问projection property的同时 _junk是您要初始化的synthesized storage property

答案 1 :(得分:-2)

您不能具有具有@State属性的类,@ State用于符合View协议的结构。 对于类,您使用ObservableObject协议,并使用@ObservedObject绑定到它们。 另外,让编译器为您生成一个初始化程序:

test_case = int(input())

for x in range(test_case):
    my_list = input().split()
    count = 1
    for each_element in my_list:
        if each_element == len(my_list): 
            if each_element[1] == my_list[0][0]: 
                temp = 1
                break
        else:
            to_compare = my_list[count]
            if each_element[1] == to_compare[0]:
                temp = 1
                break
            else:
                temp = 0
        count += 1
    print("LOOP" if temp == 0 else "NO LOOP")