从视图内的URL导入JSON



所以,我是swift的新手,能够通过阅读和观看视频将这些拼凑在一起,但是我在无数个小时的寻找解决方案后达到了一个点。

基本上什么应用程序做的是扫描的qr码,解析它从qr码读取的url得到一个关键,然后我将该关键追加到api url,我想从api输出到屏幕的结果。然而,我收到一个错误类型'()'不能符合'视图'在xcode

下面是json数据示例

[
{
"id": "160468",
"sport": "BASKETBALL",
"year": "2020",
"brand": "PANINI PRIZM",
"cardNumber": "278",
"playerName": "LaMELO BALL",
"extra": "",
"gradeName": "MINT",
"grade": "9",
"serial": "63585906",
"authDate": "1656406800",
"link": "https://www.example.com/certificate-verification?certificateNumber=63585906"
}
]

这里是我的contentview

import SwiftUI
import CodeScanner
extension URL {
var components: URLComponents? {
return URLComponents(url: self, resolvingAgainstBaseURL: false)
}
}
extension Array where Iterator.Element == URLQueryItem {
subscript(_ key: String) -> String? {
return first(where: { $0.name == key })?.value
}
}
struct Card: Decodable {
let sport: String
let year: String
let brand: String
let cardNumber: String
let playerName: String
let extra: String
let gradeName: String
let grade: String
let serial: String
}
struct ContentView: View {
@State var isPresentingScanner = false
@State var scannedCode: String = ""

var scannerSheet : some View {
CodeScannerView(
codeTypes: [.qr],
completion: { result in
if case let .success(code) = result {
self.scannedCode = code.string
self.isPresentingScanner = false
}
}
)
}

func getQueryStringParameter(url: String, param: String) -> String? {
guard let url = URLComponents(string: url) else { return nil }
return url.queryItems?.first(where: { $0.name == param })?.value
}


var body: some View {

VStack(spacing: 10) {

Image("logo-white")
.offset(y: -200)
if let urlComponents = URL(string: scannedCode)?.components,
let cert = urlComponents.queryItems?["certificateNumber"] {
//Text(cert)
let apihit = URL(string: "https://app.example.com/api.php?apikey=xxx&cert=(cert)")!

//Text(apihit.absoluteString)

var request = URLRequest(url: apihit)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

let task = URLSession.shared.dataTask(with: apihit) { data, response, error in
if let data = data {
if let cards = try? JSONDecoder().decode([Card].self, from: data) {
print(cards)
} else {
print("Invalid Response")
}
} else if let error = error {
print("HTTP Request Failed (error)")
}
}

}


Button("Scan QR Code") {
self.isPresentingScanner = true
}

.padding()
.background(Color(red: 0, green: 0, blue: 0.5))
.foregroundColor(.white)
.clipShape(Rectangle())
.cornerRadius(20)

.sheet(isPresented: $isPresentingScanner) {
self.scannerSheet
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.gray)

}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

我在网上尝试了无数的教程,但是没有一个显示如何在视图中做到这一点,我认为这是它所属的地方,因为我没有得到实际的json url,直到我阅读qr码..

要在视图中填充链接,请使用Webkit。

首先需要导入Webkit。然后,创建一个符合uiviewrepresable协议的WebView。

这是苹果的文档。这是将web内容集成到应用程序中最简单的方法。

我希望这对你有帮助!

最新更新