在swift 3 iOS中实现谷歌翻译API

嗨,我是新的iOS开发,我想在我的应用程序内实施谷歌翻译API。 我从GitHub https://github.com/prine/ROGoogleTranslate上find了一些示例代码。 我下载了示例代码,并按照从google云翻译获取api密钥提供的指示,并将其放置在代码中,但代码不起作用,iv查看了GitHub网站上的评论,发现它已经为其他开发者。 我真的不知道我在代码中做错了什么。

ROGoogleTranslateParams.swift

import Foundation public struct ROGoogleTranslateParams { public init() { } public init(source:String, target:String, text:String) { self.source = source self.target = target self.text = text } public var source = "de" public var target = "en" public var text = "Hallo" } /// Offers easier access to the Google Translate API open class ROGoogleTranslate { /// Store here the Google Translate API Key public var apiKey = "YOUR_API_KEY" /// /// Initial constructor /// public init() { } /// /// Translate a phrase from one language into another /// /// - parameter params: ROGoogleTranslate Struct contains all the needed parameters to translate with the Google Translate API /// - parameter callback: The translated string will be returned in the callback /// open func translate(params:ROGoogleTranslateParams, callback:@escaping (_ translatedText:String) -> ()) { guard apiKey != "" else { print("Warning: You should set the api key before calling the translate method.") return } if let urlEncodedText = params.text.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) { if let url = URL(string: "https://translation.googleapis.com/language/translate/v2?key=\(self.apiKey)&q=\(urlEncodedText)&source=\(params.source)&target=\(params.target)&format=text") { let httprequest = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in guard error == nil else { print("Something went wrong: \(error?.localizedDescription)") return } if let httpResponse = response as? HTTPURLResponse { guard httpResponse.statusCode == 200 else { if let data = data { print("Response [\(httpResponse.statusCode)] - \(data)") } return } do { // Pyramid of optional json retrieving. I know with SwiftyJSON it would be easier, but I didn't want to add an external library if let data = data { if let json = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary { if let jsonData = json["data"] as? [String : Any] { if let translations = jsonData["translations"] as? [NSDictionary] { if let translation = translations.first as? [String : Any] { if let translatedText = translation["translatedText"] as? String { callback(translatedText) } } } } } } } catch { print("Serialization failed: \(error.localizedDescription)") } } }) httprequest.resume() } } } } 

ViewController.swift

 import UIKit class ViewController: UIViewController { @IBOutlet var text:UITextField! @IBOutlet var fromLanguage:UITextField! @IBOutlet var toLanguage:UITextField! @IBOutlet var translation:UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func translate(_ sender: UIButton) { let translator = ROGoogleTranslate() translator.apiKey = "YOUR_API_KEY" // Add your API Key here var params = ROGoogleTranslateParams() params.source = fromLanguage.text ?? "de" params.target = toLanguage.text ?? "en" params.text = text.text ?? "Hallo" translator.translate(params: params) { (result) in DispatchQueue.main.async { self.translation.text = "\(result)" } } } } 

这些都是使用的类。 当我按“翻译”button时得到的结果如下:响应[403] – 355字节

你的帮助表示赞赏。 代码是可以从url提供下载,谢谢

我是上面提到的图书馆的作者:)。 我想你会得到403,因为你的Google Api帐户尚未正确激活。 谷歌已经改变了翻译API的政策,它不再是免费的。 所以你可能没有添加信用卡信息的Api帐户,因此得到403错误?