如何在swiftui中添加HTTP头以及如何从json获取数据?

如何在swiftui中添加HTTP头以及如何从json获取数据?,swift,swiftui,Swift,Swiftui,我正在制作一个应用程序,通过使用KakaoTalkAPI翻译语言。我在url上添加了标题,并发送了http GET请求以从json获取数据。。但是我不能得到数据。我不知道怎么了。。 [1] : 您的令牌值是以空格分隔的KakaoAK 8995e2de40ee9b465734713e5a0d2ac5,您必须在请求头中以相同的方式传递它,否则您将面临401 unauthorized错误 此外,对于键“translated_text”,响应类型为[[String]],而不是[String] 以下是工作

我正在制作一个应用程序,通过使用KakaoTalkAPI翻译语言。我在url上添加了标题,并发送了http GET请求以从json获取数据。。但是我不能得到数据。我不知道怎么了。。 [1] :


您的令牌值是以空格分隔的
KakaoAK 8995e2de40ee9b465734713e5a0d2ac5
,您必须在请求头中以相同的方式传递它,否则您将面临401 unauthorized错误

此外,对于键
“translated_text
”,响应类型为
[[String]]
,而不是
[String]

以下是工作代码-:

import SwiftUI


struct QuoteData: Decodable {
    var translated_text: [[String]]
}

struct Test: View {
    @State var quotedata: QuoteData?
    
    var body: some View {
        VStack{
            Button("get") {
                self.getData()
            }
            Text(quotedata?.translated_text[0][0] ?? "아니")
        }
    }
    
    func getData() {
        let token = "8995e2de40ee9b465734713e5a0d2ac5"
        guard let url = URL(string: "https://dapi.kakao.com/v2/translation/translate?src_lang=en&target_lang=kr&query=cotton") else {
            fatalError("Invalid URL")
        }
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("KakaoAK \(token)", forHTTPHeaderField: "Authorization")
        URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data else{ return }
            do{
                let decodedData =  try JSONDecoder().decode(QuoteData.self, from: data)
                DispatchQueue.main.async {
                    self.quotedata = decodedData
                }
            }catch let error{
                print(error)
            }
        }.resume()
    }
}

错误是什么?在哪里调用getData()方法?作为一种良好的做法,保持网络登录与用户界面分离。抱歉…我添加了按钮代码。我希望在单击按钮时显示数据。没有错误,但我无法获取任何数据。您知道错误是什么吗?一如既往,决不要使用
try?
捕获
打印
忽略分离错误。我有tested您的代码,我面临401个未经授权的错误。这就是为什么if-let条件从未执行,因为数据不可解码。感谢您的回答!!…request.setValue(“KakaoAK(token)”,forHTTPHeaderField:“Authorization”)我真的很感激你!!谢谢你!!你是我见过的最聪明的人!!!真的很感激!!我怎么付钱给你..我是初学者开发人员..@Jamong25没关系,谢谢你的好话,这些都是基础,你会慢慢学会的祝你好运。谢谢你!我会一点一点地学会的
import SwiftUI


struct QuoteData: Decodable {
    var translated_text: [[String]]
}

struct Test: View {
    @State var quotedata: QuoteData?
    
    var body: some View {
        VStack{
            Button("get") {
                self.getData()
            }
            Text(quotedata?.translated_text[0][0] ?? "아니")
        }
    }
    
    func getData() {
        let token = "8995e2de40ee9b465734713e5a0d2ac5"
        guard let url = URL(string: "https://dapi.kakao.com/v2/translation/translate?src_lang=en&target_lang=kr&query=cotton") else {
            fatalError("Invalid URL")
        }
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("KakaoAK \(token)", forHTTPHeaderField: "Authorization")
        URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data else{ return }
            do{
                let decodedData =  try JSONDecoder().decode(QuoteData.self, from: data)
                DispatchQueue.main.async {
                    self.quotedata = decodedData
                }
            }catch let error{
                print(error)
            }
        }.resume()
    }
}