?個(gè)人來(lái)說玩玩,還是用swiftui比較好,畢竟寫界面的速度快很多,而且還比較直觀。
有部分邏輯需要接入圖片上傳,因此接入了一下騰訊云對(duì)象存儲(chǔ)cos。
官網(wǎng)上只有swift的教程,沒有swiftui的。記錄一下swiftui的接入過程。
首先引入pod集成項(xiàng)目。
pod 'QCloudCOSXML'
# 據(jù)說是精簡(jiǎn)版,不過看起來(lái)好像也沒有啥效果,頭文件的引入好像根據(jù)文檔來(lái)還是會(huì)報(bào)錯(cuò)的。
# 本例子只是簡(jiǎn)單的上傳,因此用哪個(gè)都行。
# pod 'QCloudCOSXML/Transfer'
引入頭文件
import QCloudCOSXML
// 精簡(jiǎn)版用下邊的這個(gè)好像會(huì)報(bào)錯(cuò),找不到這個(gè),用上邊的沒問題
// import QCloudCOSXMLTransfer
初始化
一般來(lái)說swiftui的app部分是這樣的。不過按照教程直接繼承協(xié)議是不行的。
@main
struct DemoApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
首先新建一個(gè) appdelegate
class AppDelegate: NSObject, UIApplicationDelegate, QCloudSignatureProvider {
}
然后在里邊實(shí)現(xiàn)初始化及簽名的回調(diào)。這兩部分感覺不用寫在appdelegate的finish launch里邊,因?yàn)楝F(xiàn)在的應(yīng)用一般還要來(lái)個(gè)隱私協(xié)議。暴露出一個(gè)方法來(lái)給swiftui調(diào)用,控制流程比較方便。最好粘貼代碼,不要手敲,例如 QCloudAuthentationV5Creator 這個(gè)有個(gè)虛方法QCloudAuthentationCreator,稍不注意就失敗了。
另外本例子用的是客戶端直接同cos通訊方式,如果出現(xiàn)泄漏直接換secret也是可行的。
class AppDelegate: NSObject, UIApplicationDelegate, QCloudSignatureProvider {
func signature(with fileds: QCloudSignatureFields!, request: QCloudBizHTTPRequest!, urlRequest urlRequst: NSMutableURLRequest!, compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {
let credential = QCloudCredential.init()
credential.secretID = "xxx" // 密鑰ID
credential.secretKey = "xxx" // 密鑰secret
let creator = QCloudAuthentationV5Creator.init(credential: credential)
let signature = creator?.signature(forData: urlRequst)
continueBlock(signature, nil)
}
func initQCloud() {
let config = QCloudServiceConfiguration.init()
let endpoint = QCloudCOSXMLEndPoint.init()
endpoint.regionName = "ap-beijing" // bucket region
endpoint.useHTTPS = true
config.endpoint = endpoint
config.signatureProvider = self
QCloudCOSXMLService.registerDefaultCOSXML(with: config)
QCloudCOSTransferMangerService.registerDefaultCOSTransferManger(
with: config)
}
}
把a(bǔ)ppdelegate加入到swiftui的app中。
struct DemoApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
WindowGroup {
ContentView()
.onAppear {
delegate.initQCloud()
}
}
}
}
初始化到此完畢。
初始化完整代碼:
import SwiftUI
import QCloudCOSXML
class AppDelegate: NSObject, UIApplicationDelegate, QCloudSignatureProvider {
func signature(with fileds: QCloudSignatureFields!, request: QCloudBizHTTPRequest!, urlRequest urlRequst: NSMutableURLRequest!, compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {
let credential = QCloudCredential.init()
credential.secretID = "xxx" // 密鑰ID
credential.secretKey = "xxx" // 密鑰secret
let creator = QCloudAuthentationV5Creator.init(credential: credential)
let signature = creator?.signature(forData: urlRequst)
continueBlock(signature, nil)
}
func initQCloud() {
let config = QCloudServiceConfiguration.init()
let endpoint = QCloudCOSXMLEndPoint.init()
endpoint.regionName = "ap-beijing" // bucket region
endpoint.useHTTPS = true
config.endpoint = endpoint
config.signatureProvider = self
QCloudCOSXMLService.registerDefaultCOSXML(with: config)
QCloudCOSTransferMangerService.registerDefaultCOSTransferManger(
with: config)
}
}
struct DemoApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
WindowGroup {
ContentView()
.onAppear {
delegate.initQCloud()
}
}
}
}
上傳部分
簡(jiǎn)單上傳部分文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-541367.html
import QCloudCOSXML
func updatePic(img: UIImage) {
let picPath = "temp/\(Day(date: date).format(format: "yyyy-MM-dd"))/\(UUID().uuidString).png"
let put = QCloudCOSXMLUploadObjectRequest<AnyObject>()
put.bucket = "xxx" // bucket id
put.object = picPath // 上傳路徑
put.body = img.pngData() as AnyObject
put.setFinish { res, err in
print("upload obj finish \(res) \(err)")
}
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put)
}
到此cos接入完畢。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-541367.html
到了這里,關(guān)于swiftui接入騰訊云對(duì)象存儲(chǔ)cos的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!