Функция объявляет непрозрачный возвращаемый тип, но не имеет в своем теле операторов возврата, из которых можно вывести базовый тип - PullRequest
1 голос
/ 19 февраля 2020

Я получаю эту ошибку в моем SwiftUI 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)
            }
        }
    }
}

1 Ответ

1 голос
/ 20 февраля 2020

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

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

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

...