如何将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)
}
我设法做到了这一点,它在中工作
extension UserDefaults {
static let group = UserDefaults(suiteName: "group.com.your.domain")!
}
设置数据:
UserDefaults.group.set("objectToShare", forKey: "keyForTheObject")
获取数据:
let object = UserDefaults.group.object(forKey: "keyForTheObject")
此解决方案在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)
就是这样!