无法将“某些视图”类型的值分配给“某些视图”类型

时间:2020-04-21 07:18:48

标签: xcode swiftui

我刚刚开始学习SwiftUI,并尝试调用一个返回View的方法给View类型的变量,但是出现了这个令人惊讶的错误:

Cannot assign value of type 'some View' 
(result of 'Self.frame(width:height:alignment:)') 
to type 'some View' 
(result of 'Self.fill(_:style:)')

我想尝试为视图构图,只是为了了解会发生什么,以了解SwiftUI如何得出事物的尺寸。

    let p = Path({ (path:inout Path) -> () in
        path.addRect(CGRect(
            x:0,
            y:0,
            width:geometry.size.width,
            height:geometry.size.height
        ))
    })
    var result = p.fill(Color.red)
    result = result.frame(width: 100, height: 100)

我认为这里发生的事情是,首先我要创建一个struct Path,并调用其fill方法将其转换为View。当我将var result设置为该返回值时,应该推断出它具有类型View,XCode表示确实如此。

enter image description here

由于View协议具有frame(width:height:alignment:) -> some View方法,因此我称其为新视图。现在,由于result被推断为一个视图,而我要为其分配一个也是视图的frame的结果,那不合法吗?

(在another StackOverflow question上,有人评论“某些视图-表示一种符合View的具体类型,它一次不能是MenuView,而另一次不能是CreateChannelView。” 。如果是这样,我也想知道如何查看方法返回的具体类型。)

enter image description here

1 个答案:

答案 0 :(得分:1)

代替

var result = p.fill(Color.red)
result = result.frame(width: 100, height: 100)

将直接组合的视图用作

return p.fill(Color.red).frame(width: 100, height: 100)

some View的意思是一些不透明的具体视图类型,但是要使用赋值类型,必须必须相同,但是修饰符.fill和{{1 }}产生不同的具体类型,这就是您的分配产生错误的原因。