在放大代码段的范围内找不到类型“AnyCancellable”

Posted

技术标签:

【中文标题】在放大代码段的范围内找不到类型“AnyCancellable”【英文标题】:Cannot find type 'AnyCancellable' in scope from amplify code snippit 【发布时间】:2021-06-11 00:45:12 【问题描述】:
import Foundation
import SwiftUI
import Amplify


class MovesAPI: ObservableObject 
    
    
    @Published var todoLIst: [MoveType?] = [nil]
    
    
    init() 
        listTodos()
    
    
    func listTodos() -> AnyCancellable  //cannot find type 'AnyCancellable' in scope
        let moveType = MoveType.keys
        let sink = Amplify.API.query(request: .paginatedList(MoveType.self)) //Generic parameter 'R' could not be inferred //Type 'GraphQLRequest<_>' has no member 'paginatedList'
            .resultPublisher
            .sink 
                if case let .failure(error) = $0 
                    print("Got failed event with error \(error)")
                
            
            receiveValue:  result in
            switch result 
                case .success(let todos):
                    print("Successfully retrieved list of todos: \(todos)")
                case .failure(let error):
                    print("Got failed result with \(error.errorDescription)")
                
            
        return sink
    



最终我的目标是从 amplify GraphQL API 获取所有 MoveType 类型的模型。 这是直接粘贴到我的项目中的代码 sn-p,我收到了这些类型错误。知道为什么吗? 从放大、文档 (https://docs.amplify.aws/lib/graphqlapi/query-data/q/platform/ios#query-by-id) 中,我所做的只是更改模型名称以匹配我的后端并删除查询参数。

【问题讨论】:

在顶部添加“导入组合”。它是组合框架的一部分。 【参考方案1】:

好的,它可以工作,只是需要更简单,我使用组合模式关闭了

import Foundation
import SwiftUI
import Amplify


class MovesAPI: ObservableObject 
    
    
    @Published var todoLIst: [MoveType?] = [nil]
    
    
    init() 
    
    
    func listTodos() 
        print("listing todos")
    
        Amplify.API.query(request: .list(MoveType.self))  event in
            switch event 
               case .success(let result):
                   switch result 
                   case .success(let todos):
                       print("Successfully retrieved list of todos: \(todos)")
                   case .failure(let error):
                       print("Got failed result with \(error.errorDescription)")
                   
               case .failure(let error):
                   print("Got failed event with error \(error)")
               
           
    
    


不过,如果有人知道为什么 amplify docs 中的代码 sn-ps 不起作用,我很想知道。

【讨论】:

【参考方案2】:

我认为你需要:

import Combine

【讨论】:

【参考方案3】:

当我使用 Cocoapods 下载 Amplify 时,我遇到了来自 amplify 文档的 paginatedList 代码 sn-p 无法正常工作的问题。当我按照说明从 Swift 包管理器 (SPM) 下载 Amplify 而不是在 Amplify iOS Github 时,paginatedList 无法正常工作的问题就解决了。将 Combine 框架导入我的 Xcode 项目并没有解决 paginatedList 问题。

【讨论】:

我尝试使用 SPM 安装,但仍然得到 //Generic parameter 'R' could not be inferred //Type 'GraphQLRequest&lt;_&gt;' has no member 'paginatedList' 您是否尝试过重新启动您的 Xcode 项目工作区? 是的,但还是一样

以上是关于在放大代码段的范围内找不到类型“AnyCancellable”的主要内容,如果未能解决你的问题,请参考以下文章

在范围内找不到类型“ListenerRegistration”

在范围内找不到类型“配置”

在范围内找不到“LocationsData”

在范围内找不到 MPRemoteCommandCenter

Excel VBA:如果在范围内找不到值,请转到

尝试在 Swift iOS 中缩短 URL 时,在范围内找不到“linkBuilder”错误