Функция объявляет непрозрачный тип возврата, но не имеет операторов возврата в своем теле, из которых можно вывести базовый тип

Я получаю эту ошибку в моем представлении SwiftUI View, см. Код ниже; Я также получаю Cannot convert return expression of type 'List' to return type 'some View'.

 struct RestaurantView: View {

    @State private var isSshowingMapActionSheet = false
    @State private var isShowingSafariView = false
    let restaurant: Restaurant!
    var currenstatus: String  {
        if restaurant.isOpen {
            return "Open"
        }
        return "Closed"
    }
    var mapActionSheetButtons: [ActionSheet.Button] = [
        .default("Open in Maps", action: {
            self.openInMaps()
        }),
        .default("Open in Google Maps", action: {
            self.openInGoogleMaps()
        }),
        .cancel(Text("Cancel"))
    ]
    lazy var mapActionSheet = ActionSheet(title: Text(""), buttons: mapActionSheetButtons)

    func openInMaps() {
        let placemark = MKPlacemark(coordinate: restaurant.location.coordinate, addressDictionary: [CNPostalAddressStreetKey as String: restaurant.address!])

        let mapItem = MKMapItem(placemark: placemark)
        mapItem.name = self.restaurant.name
        mapItem.phoneNumber = self.restaurant.phone

        let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]

        mapItem.openInMaps(launchOptions: launchOptions)
    }
    func openInGoogleMaps() {
        if let url = URL(string: "comgooglemapsurl://maps.google.com/?q=\(restaurant.name.URLEncoded)@\(restaurant.location.coordinate.latitude),\(restaurant.location.coordinate.longitude)") {
            UIApplication.shared.open(url, options: [:])
        }
    }



    var body: some View {
        List {
            ListRow("ClockGlyph", action: {

            }, label: {
                OpenHoursView(restaurant)
            })

        ListRow("PhoneGlyph", action: {
            UIApplication.shared.op
        }, label: {
            Text(self.restaurant!.phone)
        })

        if (restaurant.homepage != nil) {
            return ListRow("SafariGlyph", action: {
                isShowingSafariView.toggle()
            }, label:  {
                Text(restaurant.homepage)
            }
        }

        ListRow("PhoneGlyph", action: {
            UIApplication.shared.canOpenURL(self.restaurant.phoneURL)
        }, label: {
            Text(self.restaurant.phone)
        })

            if restaurant!.facebookURL != nil {
                ListRow("FacebookGlyph", action: {
                }, label: {
                    Text(self.restaurant.facebookURL!)
                })
            }

        ListRow("PinGlyph", action: {
            self..isSshowingMapActionSheet.toggle()
        }, label: {
            VStack {
                Text(restaurant!.address!.replacingOccurrences(of: "\n", with: ", "))
                Text("Visa vägbeskrivning")
                    .font(.subheadline)
                    .foregroundColor(.gray)
            }

        })

        .actionSheet(isPresented: $isSshowingMapActionSheet, content: {
                mapActionSheet
            })
        .sheet(item: $isShowingSafariView, content: {
                SafariView(url: restaurant.homepageURL)

            })
    }

}

А вот мой ListRow класс:

struct ListRow<Label> : View where Label : View {
    let image: Image
    var action:(() -> ())
    let label: () -> Label

    init(_ image: Image, action: @escaping () -> Void, @ViewBuilder label: @escaping () -> Label) {
        self.image = image
        self.action = action
        self.label = label
    }
    var body: some View {
        Button(action: self.action) {
            HStack(spacing: 10) {
                image.resizable().frame(width: 20, height: 20)
                self.label().font(.subheadline)
            }
        }
    }
}

person Anders Frohm    schedule 19.02.2020    source источник
comment
На какой строчке ошибка?   -  person Sweeper    schedule 19.02.2020
comment
В строке с: var body: some View   -  person Anders Frohm    schedule 19.02.2020


Ответы (1)


Есть несколько опечаток, которые приводят к сбою компиляции.

С SwiftUI вы можете получать ошибки Xcode, которые не очень полезны, вы должны попробовать закомментировать разные строки, пока это не даст вам более информативную ошибку. С новой бета-версией Xcode 11.4 должно быть лучше.

В общем, попробуйте создавать представления меньшего размера, разбивайте их на отдельные структуры, чтобы было легче обнаруживать опечатки, это также поможет компилятору.

person Natalia Panferova    schedule 19.02.2020
comment
Спасибо, что заметили опечатку, но ошибка не в этом. - person Anders Frohm; 20.02.2020
comment
@AndersFrohm не могли бы вы предоставить более полный пример кода? - person Natalia Panferova; 20.02.2020
comment
Я также получаю использование неразрешенного идентификатора self в строках self.openInMaps () и self.openInGoogleMaps () - person Anders Frohm; 20.02.2020