使用 Swift 中的 int 变量访问字典中的值
Access a value in a dictionary using an int variable in Swift
我正在开发一个 iOS 应用程序,我想使用 Array()
.
访问字典中的特定值
我的字典包含一个包含结构的数组。
let array = [(key: "S", value: [Thunderbolt.repoStruct(repoName: "Semiak Repo", repoURL: "https://repo.semiak.dev", icon: Optional("iconRound"))]), (key: "T", value: [Thunderbolt.repoStruct(repoName: "Thunderbolt iOS Utilities", repoURL: "https://repo.thunderbolt.semiak.dev", icon: Optional("iconRound"))])]
我正在用数组创建一个 UITableView
:节名称是 key
值,单元格标题是 repoStruct.repoName
值,以下值相同.
要访问 repoName,我会使用 Array(array)[0].1[0].repoName
。
问题是我不知道我想要访问的确切位置,相反,我使用 indexPath 来知道我需要哪个值:
Array(array)[indexPath.section].indexPath.row[0].repoName
这应该 return 我的单元格的 repoName,但给我以下错误:Value of tuple type '(key: String, value: [repoStruct])' has no member 'indexPath'
我也试过使用:
let row = indexPath.row
Array(array)[indexPath.section].row[0].repoName
但它给了我同样的错误:Value of tuple type '(key: String, value: [repoStruct])' has no member 'row'
我不知道为什么 Array(array)[0].1
有效并且 return 给我值,但 Array(array)[indexPath.section].row
没有。它在做同样的事情:使用位置访问一个值,它是一个 int,例如 indexPath.
我怎样才能做到这一点?
提前致谢。
强烈建议您不要在数据源数组中使用元组。用额外的结构替换元组
struct Section {
let name : String
let items : [Thunderbolt.repoStruct]
}
let array = [Section(name: "S", items: [Thunderbolt.repoStruct(repoName: "Semiak Repo", repoURL: "https://repo.semiak.dev", icon: Optional("iconRound"))],
Section(name: "T", items: [Thunderbolt.repoStruct(repoName: "Thunderbolt iOS Utilities", repoURL: "https://repo.thunderbolt.semiak.dev", icon: Optional("iconRound"))]]
并在索引路径
中获取一个项目
let section = array[indexPath.section]
let item = section.items[indexPath.row]
let name = item.repoName
首先,您的 array
已经是一个数组,所以没有必要说 Array(array)
- 只需 array
就足够了,尽管应该避免使用这样的通用名称。
I do not know why array[0].1[0]
works
让我们把它分开 - 您正在通过 [0]
访问 array
中的第一个元素,并在其中访问元组 .1
的第二个元素,最后是第一个元素该 value
数组。您可以使用 array[0].value[0]
来获得相同的效果并使代码更具可读性。
but array[indexPath.section].row
doesn't
那是因为你的数组不包含任何叫做 row
.
的东西
改用array[indexPath.section].value[indexPath.row].repoName
。
我正在开发一个 iOS 应用程序,我想使用 Array()
.
我的字典包含一个包含结构的数组。
let array = [(key: "S", value: [Thunderbolt.repoStruct(repoName: "Semiak Repo", repoURL: "https://repo.semiak.dev", icon: Optional("iconRound"))]), (key: "T", value: [Thunderbolt.repoStruct(repoName: "Thunderbolt iOS Utilities", repoURL: "https://repo.thunderbolt.semiak.dev", icon: Optional("iconRound"))])]
我正在用数组创建一个 UITableView
:节名称是 key
值,单元格标题是 repoStruct.repoName
值,以下值相同.
要访问 repoName,我会使用 Array(array)[0].1[0].repoName
。
问题是我不知道我想要访问的确切位置,相反,我使用 indexPath 来知道我需要哪个值:
Array(array)[indexPath.section].indexPath.row[0].repoName
这应该 return 我的单元格的 repoName,但给我以下错误:Value of tuple type '(key: String, value: [repoStruct])' has no member 'indexPath'
我也试过使用:
let row = indexPath.row
Array(array)[indexPath.section].row[0].repoName
但它给了我同样的错误:Value of tuple type '(key: String, value: [repoStruct])' has no member 'row'
我不知道为什么 Array(array)[0].1
有效并且 return 给我值,但 Array(array)[indexPath.section].row
没有。它在做同样的事情:使用位置访问一个值,它是一个 int,例如 indexPath.
我怎样才能做到这一点?
提前致谢。
强烈建议您不要在数据源数组中使用元组。用额外的结构替换元组
struct Section {
let name : String
let items : [Thunderbolt.repoStruct]
}
let array = [Section(name: "S", items: [Thunderbolt.repoStruct(repoName: "Semiak Repo", repoURL: "https://repo.semiak.dev", icon: Optional("iconRound"))],
Section(name: "T", items: [Thunderbolt.repoStruct(repoName: "Thunderbolt iOS Utilities", repoURL: "https://repo.thunderbolt.semiak.dev", icon: Optional("iconRound"))]]
并在索引路径
中获取一个项目let section = array[indexPath.section]
let item = section.items[indexPath.row]
let name = item.repoName
首先,您的 array
已经是一个数组,所以没有必要说 Array(array)
- 只需 array
就足够了,尽管应该避免使用这样的通用名称。
I do not know why
array[0].1[0]
works
让我们把它分开 - 您正在通过 [0]
访问 array
中的第一个元素,并在其中访问元组 .1
的第二个元素,最后是第一个元素该 value
数组。您可以使用 array[0].value[0]
来获得相同的效果并使代码更具可读性。
but
array[indexPath.section].row
doesn't
那是因为你的数组不包含任何叫做 row
.
改用array[indexPath.section].value[indexPath.row].repoName
。