【问题标题】:Type 'ContentView' does not conform to protocol 'View' (Xcode - Swift UI)类型“ContentView”不符合协议“View”(Xcode - Swift UI)
【发布时间】:2021-01-05 13:40:48
【问题描述】:

我尝试在 ContentView(Swift UI) 中为我的应用程序实现 ,,Face ID" 功能,但之后我收到此错误 - "Type 'ContentView' does not conform to protocol 'View'"。当我尝试修复时它提供的错误解决方案:typealias Body = <#type#> 但我不知道该放什么。也许我只是以错误的方式实现了 Face ID,所以这里是结果代码源和实现之前的代码源。

之后:

import SwiftUI
import LocalAuthentication

struct ContentView : View {
    
    
    @State private var isUnlocked = false
    @ObservedObject var service: DataService = .shared
    
    var categories:[String:[Goal]] {
        .init(
            grouping: service.goals,
            by: {$0.category.rawValue}
        )
    }
    
    func authenticate() {
        let context = LAContext()
        var error: NSError?

        // check whether biometric authentication is possible
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            // it's possible, so go ahead and use it
            let reason = "We need to unlock your data."

            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { success, authenticationError in
                // authentication has now completed
                DispatchQueue.main.async {
                    if success {
                        self.isUnlocked = true
                    } else {
                        // there was a problem               
                }
                }
    
    var body: some View {
        VStack {
            if self.isUnlocked {
        NavigationView{
            List (categories.keys.sorted(), id:\.self) {key in
                GoalRow(categoryName: "Level \(key)".uppercased(), goals: self.categories[key]!)
                    .frame(height: 320)
                .padding(.top)
                .padding(.bottom)
            }
            .navigationBarTitle(Text("Future"))
        }
            } else {
                Text("Locked")
            }
        }
        .onAppear(perform: authenticate)
  }
}

#if DEBUG
struct Content_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
        }
    }
}

之前:

import SwiftUI

struct ContentView : View {
    
    @ObservedObject var service: DataService = .shared
    
    var categories:[String:[Goal]] {
        .init(
            grouping: service.goals,
            by: { $0.category.rawValue }
        )
    }
    
    
    var body: some View {
        NavigationView{
            List (categories.keys.sorted(), id:\.self) {key in
                GoalRow(categoryName: "Level \(key)".uppercased(), goals: self.categories[key]!)
                    .frame(height: 320)
                .padding(.top)
                .padding(.bottom)
            }
            .navigationBarTitle(Text("Future"))
        }
    }

}

#if DEBUG
struct Content_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

【问题讨论】:

    标签: swift xcode swiftui swift-protocols contentview


    【解决方案1】:

    首先,选择所有代码并按cmd+i 进行代码缩进。 在代码中,您在代码末尾关闭了 3 个大括号,这是不正确的。添加这 3 个大括号用于身份验证功能。

    struct ContentView : View {    
        @State private var isUnlocked = false
        @ObservedObject var service: DataService = .shared
        
        var categories:[String:[Goal]] {
            .init(
                grouping: service.goals,
                by: {$0.category.rawValue}
            )
        }
        
        func authenticate() {
            let context = LAContext()
            var error: NSError?
            
            // check whether biometric authentication is possible
            if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
                // it's possible, so go ahead and use it
                let reason = "We need to unlock your data."
                
                context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { success, authenticationError in
                    // authentication has now completed
                    DispatchQueue.main.async {
                        if success {
                            self.isUnlocked = true
                        } else {
                            // there was a problem
                        }
                    }
                }
            }
        }
        
        
        //Your body view
    }
    
    #if DEBUG
    struct Content_Previews : PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    #endif
    

    【讨论】:

    • 谢谢伙计!现在按我的意愿工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多