一,OSS私有文件增加验签,本地SDK在URL后增加签名,无需网络请求权限:
//
//
func ossImageUrlAddVerificationSignature(filePath: String) -> String? {
guard let ossParamsModel = self.ossSignModel else {
return nil;
}
let endpoint: String = ossParamsModel.endpoint;
let accessKeyId: String = ossParamsModel.accessKeyId;
let accessKeySecret: String = ossParamsModel.accessKeySecret;
//objectKey为文件在OSS中的路径+文件名
let objectKey: String = filePath;
let credential = OSSStsTokenCredentialProvider(accessKeyId: accessKeyId, secretKeyId: accessKeySecret, securityToken: "");
let client = OSSClient(endpoint: endpoint, credentialProvider: credential)
let task = client.presignConstrainURL(withBucketName: AlibabaOSSImageServerBucketName, withObjectKey: objectKey, httpMethod: "GET", withExpirationInterval: 60 * 4, withParameters: [:]);
var signatureUrl: String?;
task.continue({ task in
if nil == task.error {
signatureUrl = task.result as? String;
}
return nil;
});
return signatureUrl;
}
//
//
二,UIView的autoresizingMask属性作用:
// // let animationView = UIView(frame: view.bounds) animationView.autoresizingMask = [.flexibleWidth, .flexibleHeight] view.addSubview(animationView) // //
autoresizingMask,是view布局的一种方式,当view在不使用AutoLayout布局的情况下,使用frame布局时,响应其父视图的尺寸变化而变化。
以上animationView的frame会填充其父视图的整个区域。当父视图(例如,在设备旋转时)变宽或变高时,animationView 的宽度和高度也会自动拉伸和收缩,以保持与父视图的边缘对齐(或保持固定的边距)。
三,git开启LFS上传大文件;
//1,安装
brew install git-lfs
//2,查看是否成功和版本
git lfs -v
//3,将本地大文件交给lfs管理,可多次执行
git lfs track "文件名"
//4,查看当前lfs管理的文件列表
git lfs track
//5,提交暂存区、本地及将大文件推送到远程管理,包括.gitattributes文件
git add .
git commit -m "msg"
git push
//6,再拉取一下大文件
git lfs pull
//7,将文件交给lfs管理,可执行多次
git lfs migrate import --include-ref=master --include="FlowerClassifier.mlmodel"
git lfs migrate import --include-ref=master --include="MLKitTextRecognitionCommon"
git lfs migrate import --include-ref=master --include="MLKitVisionKit"
git lfs migrate import --include-ref=master --include="MLKitXenoCommon"
//8,提交
git push --all --force
或
git push
四,bash和zsh之间的切换;
//判断当前是bash还是zsh
echo $SHELL
//切换到bash
chsh -s /bin/bash
//切换到zsh
chsh -s /bin/zsh
五,iOS18,TranslateAPI在swift中混编swiftUI,让其翻译指定的句子:
//
//
import SwiftUICore
import UIKit
import SwiftUI
struct SkyAppleTranslateView: View {
@State private var showTranslation = true;
// Define the text you want to translate.
var originalText: String;
var body: some View {
VStack {
}
// Offer a system UI translation.
.translationPresentation(isPresented: $showTranslation,
text: originalText)
.navigationTitle("translate")
}
static func showInController(controller: UIViewController, translateString: String) -> Void {
if translateString.count <= 0 {
return;
}
let translateView = SkyAppleTranslateView(originalText: translateString);
let hostingController = UIHostingController(rootView: translateView);
hostingController.view.isHidden = true;
controller.addChild(hostingController)
controller.view.addSubview(hostingController.view)
hostingController.view.frame = controller.view.bounds
hostingController.didMove(toParent: controller)
}
}
//
//
使用:
@objc func translateEvent(_ bt: UIButton) -> Void {
SkyAppleTranslateView.showInController(controller: self, translateString: "你好,世界!");
}
六,RESTful API标准
何为RESTful API?
RESTful API(Representational State Transfer)是一种基于HTTP协议设计的接口规范,用于前后端通信
标准:
1,获取juices实体的数据列表:
GET:
host/juices
body:null
返回:数组 + 状态码
2,获取某一个实体的详情
GET:
host/juices/1
body:null
返回:字典+ 状态码
3,上传/添加一个实体:
POST:
host/juice
body:{实体字典}
返回:状态码(是否成功等)
4,更新某一个实体:
PUT:
/juices/2(实体ID)
GET:
/juices/update/2(实体ID)
body:null
返回:状态码(是否成功等)
5,删除某一个实体:
DELETE:
/juices/2(实体ID)
GET:
/juices/delete/2(实体ID)
body:null
返回:状态码(是否成功等)
PS:切记状态码的正确使用也是RESTful API的标准之一。
七,Error:HandyJSON Command SwiftCompile failed with a nonzero exit code
To:
Pods – HandyJSON Target – Swift Compiler – Code Generation
Setting:
Compilation Mode – Release : Incremental

