Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 缺少参数'的参数;项目';随时待命_Swift_Firebase_Swiftui - Fatal编程技术网

Swift 缺少参数'的参数;项目';随时待命

Swift 缺少参数'的参数;项目';随时待命,swift,firebase,swiftui,Swift,Firebase,Swiftui,我正在创建一个带有Swift UI的新闻应用程序,我使用firebase。但我总是有同样的错误:“调用中缺少参数'item'的参数”。我使用firebase Firestore存储我的文章数据,这里称为“项目”。当我使用“(item.[…]??”)输入文本时,我遇到了问题。我不知道为什么 // This is my code where I don't have a problem import SwiftUI import Firebase import Ballcap struct Sw

我正在创建一个带有Swift UI的新闻应用程序,我使用firebase。但我总是有同样的错误:“调用中缺少参数'item'的参数”。我使用firebase Firestore存储我的文章数据,这里称为“项目”。当我使用“(item.[…]??”)输入文本时,我遇到了问题。我不知道为什么

// This is my code where I don't have a problem

import SwiftUI
import Firebase
import Ballcap

struct SwiftUIView: View {

    @ObjectBinding var dataSource: ItemDatabase = ItemDatabase()

    var item: Item

    var body: some View {

        VStack {
            Text(item.categorie ?? "")
                .font(.title)
                .fontWeight(.bold)
                .foregroundColor(.green)

            List {
                ForEach(self.dataSource.items.identified(by: \.id)) { item in
                    MediumArticleItem(item: item.data!)
                }
            }
        }
    }

    struct MediumArticleItem : View {

        var item: Item

        var body: some View {
            HStack {
                Image("test")
                    .resizable()
                    .renderingMode(.original)
                    .aspectRatio(contentMode: .fill)
                    .frame(width: 120, height: 100)
                    .cornerRadius(5)
                    .shadow(radius: 3)

                Spacer()

                VStack(alignment: .leading, spacing: 5.0) {
                    Text(item.title ?? "")
                        .font(.headline)
                        .foregroundColor(.primary)
                        Text(item.body ?? "")
                            .font(.subheadline)
                            .foregroundColor(.secondary)
                            .multilineTextAlignment(.leading)
                            .lineLimit(4)

                        }
                .frame(width: 200, height: 100)
                Spacer()

                    }
            .frame(width: 330)
        }
    }
}

// This is the end of my  View File and where I have a problem: 

#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        if FirebaseApp.app() != nil {
                    FirebaseApp.configure()
                }
        return SwiftUIView() 
  // the problem is here...
    }
}
#endif

// ...and it proposed me to fix it buy this : 

#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        if FirebaseApp.app() != nil {
                    FirebaseApp.configure()
                }
        return SwiftUIView(item: Item)  // <- but now I have a new error and it's wrote : "Cannot convert value // of type 'Item.Type' to expected argument type 'Item' "

    }
}
#endif


// I have two models files for the connection to Firestore : 
// This one is my Item.swift

import SwiftUI
import Ballcap
import Firebase


struct Item: Modelable, Codable, Hashable {

    var title: String?

    var body: String?

    var body2: String?

    var body3: String?

    var categorie: String?

    var author: String?

}

// And this one is my ItemDataSource file :


import Ballcap
import Firebase
import SwiftUI
import Combine

class ItemDatabase: BindableObject {

    var willChange = PassthroughSubject<Void, Never>()

    var _dataSource: DataSource<Document<Item>>?

    var items: [Document<Item>] = [] {
        willSet { self.willChange.send() }
    }

    init() {
        _dataSource = DataSource<Document<Item>>.Query(Document<Item>.collectionReference).dataSource()
            .onCompleted({ [weak self] (_, items) in
                self?.items = items
            }).listen()
    }
}
//这是我没有问题的代码
导入快捷键
进口火基
进口球帽
结构快捷视图:视图{
@ObjectBinding变量数据源:ItemDatabase=ItemDatabase()
var项目:项目
var body:一些观点{
VStack{
文本(item.categorie???)
.font(.title)
.fontWeight(.粗体)
.foregroundColor(.绿色)
名单{
ForEach(self.dataSource.items.identified(by:\.id)){item in
MediumArticleItem(项目:item.data!)
}
}
}
}
结构MediumArticleItem:视图{
var项目:项目
var body:一些观点{
HStack{
图像(“测试”)
.可调整大小()
.renderingMode(.original)
.aspectRatio(内容模式:.fill)
.框架(宽度:120,高度:100)
.转弯半径(5)
.阴影(半径:3)
垫片()
VStack(对齐:。前导,间距:5.0){
文本(item.title???)
.font(.headline)
.foregroundColor(.primary)
文本(item.body??“”)
.font(.subheadline)
.foregroundColor(.secondary)
.multilitextalignment(.leading)
.lineLimit(4)
}
.框架(宽:200,高:100)
垫片()
}
.框架(宽度:330)
}
}
}
//这是我的视图文件的结尾,我遇到了一个问题:
#如果调试
结构快捷视图\u预览:预览提供程序{
静态var预览:一些视图{
如果FirebaseApp.app()!=nil{
FirebaseApp.configure()
}
返回SwiftUIView()
//问题就在这里。。。
}
}
#恩迪夫
//…它建议我修复它买这个:
#如果调试
结构快捷视图\u预览:预览提供程序{
静态var预览:一些视图{
如果FirebaseApp.app()!=nil{
FirebaseApp.configure()
}

return SwiftUIView(item:item)/您的
SwiftUIView
的属性定义为:

var项目:项目
这意味着,除非您为视图创建初始值设定项,否则编译器将为您合成一个初始值设定项。在本例中,类似于以下内容:

init(数据源:ItemDatabase=ItemDatabase(),item:item){
self.dataSource=数据源
self.item=项目
}
这就是为什么您必须创建视图,并将项作为参数传递

关于以下方面的错误:

SwiftUIView(item:item)//可以省略数据源,因为initilizer有一个默认值
Item
不是一个值,而是一个类型。假设您有一个需要整数的函数,而不是这样做:
myfunc(value:3)
,而是这样做:
myfunc(value:Int)
。这是编译器告诉您的,但类型是
Item
,而不是
Int

因此,您需要使用Item的初始值设定项创建一个Item类型的值:

SwiftUIView(项目:项目(标题:“abc”,…)//在此处使用正确的初始值设定项

我认为这是一个很好的答案,但是你能澄清一下你想用这行代码做什么吗
返回SwiftUIView(项目:项目)
?你希望它做什么?谢谢你的回答,但它会打印我在其中输入的文本:SwiftUIView(项目:项目(标题:“abc”,…).我不知道如何更改它,因为我希望它打印我文章的类别名称,并在里面显示firebase@MathieuCloart这里不是一个经验丰富的iOS开发人员,但其想法是预览,即视图
SwiftUIView\u预览在Live view中显示的内容,需要一些数据来填充
SwiftUIView
。如果要用动态数据填充预览视图,则可以通过
SwiftUIView(项:项(标题:“\(dynamicData)”,…)
将其输入预览。否则,预览将包含静态数据。