[英]Can't return elements from two-dimensional array
我正在尝试制作一个保存标题和网站链接的功能
这就是我试图存储的
[0] -> [TITLE, LINK]
[1] -> [TITLE, LINK]
[2] -> [TITLE, LINK]
这就是我的做法
//Create array
var favoriteProducts = [[String:String]]()
//Add products
let firstArray = [titleName:String(), link:String()]
favoriteProducts.append(firstArray)
//Add to defaults
UserDefaults.standard.set(favoriteProducts, forKey: "favProducts")
下一步是使用ForEach
循环返回标题和链接。 为了调试我正在尝试使用
UserDefaults.standard.array(forKey: "favProducts")![0][0]
哪个返回
Value of type 'Any' has no subscripts
然而
UserDefaults.standard.array(forKey: "favProducts")![0]
退货
(website, link)
所以我的问题是如何单独返回网站和链接,而不仅仅是整个下标?
您可以将 arrayOfStrings 存储在 struct array 中,并且可以从 struct 访问 vale,例如
var favouriteProducts = [[String:Any]]()
var listOfSite = [SiteDetail]()
var firstArray = ["titleName":"String","link":"firstlink"]
var secondArray = ["titleName":"s","link":"s"]
favouriteProducts.append(firstArray)
favouriteProducts.append(secondArray)
UserDefaults.standard.set(favouriteProducts, forKey: "favProducts")
let value = UserDefaults.standard.array(forKey: "favProducts") as? [[String:String]] ?? [[:]]
for values in value{
let siteName = values["titleName"] as? String ?? ""
let link = values["link"] as? String ?? ""
let siteDetail = SiteDetail(website: siteName, link: link)
listOfSite.append(siteDetail)
}
print("listOf \(listOfSite[0].link)")
print("listOf \(listOfSite[0].website)")
//////////////////////////
struct SiteDetail{
var website:String?
var link:String?
}
这里UserDefaults.standard.array
返回一个Any
类型的数组,并且您正在存储一个字典数组。 所以在检索时,需要将数组元素转换为字典。
此外,您可以使用键来获取字典值。
let firstElement = (UserDefaults.standard.array(forKey: "favProducts")?[0] as? [String: String])
let title = firstElement?["titleName"]
let link = firstElement?["link"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.