首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI:为什么UIHostingController(rootView:)可以传递零值?

SwiftUI:为什么UIHostingController(rootView:)可以传递零值?
EN

Stack Overflow用户
提问于 2020-07-04 22:17:17
回答 1查看 378关注 0票数 0

在Xcode游乐场:

代码语言:javascript
复制
func makeView<T:View>(v: T) -> T?{
    nil
}


let v0 = makeView(v: Text(""))
let view = UIHostingController(rootView: v0)

注意,func UIHostingController(rootView:)签名不允许传递零值:

代码语言:javascript
复制
open class UIHostingController<Content> : UIViewController where Content : View {

    public init(rootView: Content)
}

那么,为什么我可以将零传递给UIHostingController(rootView:)?

(谢谢;)

更新:

所以我试着写一些类似于UIHostingController类的文章:

代码语言:javascript
复制
protocol P{
    var name: String {get}
}

class Container<T> where T: P{
    init(a:T){
        print(a.name)
    }
}

struct A: P {
    var name:String
    
    init?(name:String) {
        
        if name.isEmpty{
            return nil
        }
        
        self.name = name
    }
}

但是,当我创建容器实例时,会发生一些错误:

代码语言:javascript
复制
let p = Container(a: A(name: ""))

编译器抱怨我:

参数类型'A?‘不符合预期类型'P‘

那么UIHostingController是怎么做到的呢?

EN

回答 1

Stack Overflow用户

发布于 2020-07-05 05:19:16

在下面的代码中,V0确实是零。但是,需要注意的是,v0是文本类型的?

代码语言:javascript
复制
let view = UIHostingController(rootView: v0)

即使在线下不起作用

代码语言:javascript
复制
let view = UIHostingController(rootView: nil)

这个很管用。

代码语言:javascript
复制
let view = UIHostingController<Text?>(rootView: nil)

要修复错误“泛型类‘容器’要求'A?‘符合’P‘,容器类可以更新如下

代码语言:javascript
复制
class Container<T>: X where T: P{
    init(a:T?){
        if let a = a {
            print(a.name)
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62734995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档