【问题标题】:Alamofire Type 'ParameterEncoding' has no member 'URL' Swift 3Alamofire 类型 'ParameterEncoding' 没有成员 'URL' Swift 3
【发布时间】:2017-03-01 15:33:42
【问题描述】:

我正在尝试将我的代码从 swift 2 版本迁移到 swift 3 版本。 我无法迁移以下代码部分,也没有找到任何解决方案。 我该怎么做?

// MARK: URLRequestConvertible

     public var URLRequest: NSMutableURLRequest {
            let urlComponent = NSURLComponents(string: Router.baseURL)!
            urlComponent.path = Router.basePath.stringByAppendingString(path)

            let mutableURLRequest = NSMutableURLRequest(URL: urlComponent.URL!)
            mutableURLRequest.HTTPMethod = method.rawValue

            var parameters: [String: AnyObject] = Dictionary()
            parameters["key"] = Router.key
            parameters["hl"] = "en"

            switch self {
            case .getMostPopularVideos(let pageToken):
                parameters["part"] = "snippet,contentDetails,statistics"
                parameters["chart"] = "mostPopular"
                parameters["videoCategoryId"] = TubeTrends.Settings.topTrendsCat
                if let pageToken = pageToken {
                        parameters["pageToken"] = pageToken
                }
                return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0  //This part Giving Error like Alamofire Type 'ParameterEncoding' has no member 'URL'

//            default:
//                return mutableURLRequest
            }
        }
    }

【问题讨论】:

  • 我假设您不仅要更新到 Swift 3,还要使用最新版本的 Alamofire?
  • 是的,你是对的

标签: swift swift3 alamofire


【解决方案1】:

看起来 Swift 3 发生了很多变化。尝试通过参考以下代码来更改您的代码。

func asURLRequest() throws -> URLRequest {
        let url = URL(string: Router.baseURLString)!
        var urlRequest = URLRequest(url: url.appendingPathComponent(path))
        urlRequest.httpMethod = method.rawValue

        if let token = Router.OAuthToken {
            urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
        }

        switch self {
        case .createUser(let parameters):
            return try Alamofire.JSONEncoding.default.encode(urlRequest, with: parameters)
        case .updateUser(_, let parameters):
            return try Alamofire.URLEncoding.default.encode(urlRequest, with: parameters)
        default:
            return urlRequest
        }
    }

【讨论】:

    【解决方案2】:

    我会将此计算属性的名称更改为 request,以避免与新类型名称 URLRequest 发生冲突。巧合的是,这个计算属性应该使用URLRequest的类型:

    public var request: URLRequest {
        let url = URL(string: Router.baseURL)!
            .appendingPathComponent(Router.basePath)
            .appendingPathComponent(path)
    
        var request = URLRequest(url: url)
        request.httpMethod = method.rawValue
    
        var parameters = [String: Any]()
        parameters["key"] = Router.key
        parameters["hl"] = "en"
    
        switch self {
        case .getMostPopularVideos(let pageToken):
            parameters["part"] = "snippet,contentDetails,statistics"
            parameters["chart"] = "mostPopular"
            parameters["videoCategoryId"] = TubeTrends.Settings.topTrendsCat
            if let pageToken = pageToken {
                parameters["pageToken"] = pageToken
            }
            return try! Alamofire.URLEncoding.default.encode(request, with: parameters)
        }
    }
    

    【讨论】:

    • 感谢您的帮助罗。但它在 var request = URLRequest(url: url) 上给出错误,例如无法调用非函数类型'URLRequest'的值
    • 您是否更改了此变量的名称?当你有一个同名的变量时,它可能会被 URLRequest 类型混淆。
    • 是的,我试过了,但我认为 URLRequest(url: url) 不是变量名引起的问题没有解决
    • 不,问题出在其他地方,因为这是我们在 Swift 3 中使用 URLRequest 的方式。要么你的代码中与 URLRequest 发生冲突,要么你没有定义 URL正确。
    • 感谢您的帮助 Rob 我解决了问题。只在 URLRequest 之前添加了 Alamofire。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多