swift - 如何将 uiviewcontroller 数据传递给 swiftui 小部件类
问题描述
如何将 uiviewcontroller 数据传递给 swiftui 小部件类
if let userDefaults = UserDefaults(suiteName: "group.com.soup.ios.app") {
UserDefaults.standard.set(self.dat ?? "", forKey: "date")
UserDefaults.standard.set(self.textData.text ?? "", forKey: "text")
}
if let userDefaults = UserDefaults(suiteName: "group.com.soup.ios.app") {
let text = UserDefaults.standard.object(forKey: "text") as? String
Text(text ?? "Add Data").lineLimit(2)
.truncationMode(.middle)
}
解决方案
该解决方案在 swift 5 中。
为了在目标之间传递数据,您需要:
- 创建你的 sharedDefaults 结构
- 声明你的全局数据变量
- 使用支持变量从 target\viewcontroller 更改变量的数据。
首先创建一个新的 .swift 文件。继续检查员>文件>目标成员资格并选择您要交流的目标。
SharedDefaults 助手
//This goes in your new swift file
let sharedUserdefaults = UserDefaults(suiteName: SharedDefault.suitName)
struct SharedDefault {
static let suitName = "group.com.soup.ios.app"
struct Keys{
static let Key = "text"
}
}
全局数据变量
//This goes in your new swift file
//This is an array of strings change the type by changing what's after "data:"
var data: [String] {
get {
return sharedUserdefaults?.stringArray(forKey: Key) as? [String] ?? [String]()
} set {
}
}
所以上面是一个 get/set 变量,它存储和接收您从小部件和父应用程序保存/获取的数据。
实际保存/检索东西
现在要在您的应用程序或目标中使用这些东西,您必须
- 声明支持变量:
var myData: [String] = [] //This is not required but if you need to display contents in real time I'd suggest you use this.
var currentData = data //Helper variable to pass data to the sharedVariable
override func viewDidLoad() {
super.viewDidLoad()
myData.append(contentsOf: data)
}
- 保存东西:
//Update both data and current data
myData.append("ok")
currentData.append("ok")
sharedUserdefaults?.set(currentData, forKey: SharedDefault.Keys.Key)
- 删除东西:
//Update both data and current data
mydata.remove(at: 0)
currentData.remove(at: 0)
sharedUserdefaults?.set(currentData, forKey: SharedDefault.Keys.Key)
而已!
推荐阅读
- php - 按下 InlineKeyboard 按钮时未收到更新
- filter - 如何在 PowerApps 中获得不同的图库磁贴?
- amazon-s3 - 作为 PyTorch 数据集,您使用什么来访问 S3 和其他对象存储提供程序上的 CSV 数据?
- reactjs - Material-UI TextField onChange 不会在测试中调用函数
- c# - 按最大计算值排序列表c#
- ibm-cloud - IBM Cloud Object Storage:使用 CLI 获取存储桶大小
- wordpress - 在产品属性之间添加“x”,而不是在最后一个属性之后添加“x”
- java - 如何用“@”符号分隔 2 个单词?
- javascript - Uncaught SyntaxError: Unexpected token < in JSON at position 0 with TinyMCE Editor Image Upload
- javascript - 通过滚动另一个和周围的方式滚动 DIV