如何在 SwiftUI 中获取字符串索引?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中获取字符串索引?【英文标题】:How to get String Index in SwiftUI? 【发布时间】:2021-12-27 17:49:49 【问题描述】:我正在开发一个需要读取一串数字的应用程序。
我有一系列要读取数字的标签,我需要它们来显示它。
但是,我不知道如何在 SwiftUI 中读取字符串的索引
我已经看到了这个通过做 swift 完成
let input = "Blah"
let char = input[3]
extension StringProtocol
subscript(offset: Int) -> Character
self[index(startIndex, offsetBy: offset)]
我想要达到的就是这个。
@State var id = "12345"
@State var label1 = id[0]
@State var label2 = id[1]
etc
我知道字符串不是数组,但我试图基本上以这种方式得到它。 ID 来自文本输入。
【问题讨论】:
label1
和 label2
似乎不太可能是 @State
变量——它们应该是计算属性。
你是对的,但我正在硬编码一些状态变量来测试我在做什么。
在这种情况下,您应该能够在计算属性中使用您的extension StringProtocol
subscript
。你试过了吗?
我做到了,我无法让它工作。
你能在minimal reproducible example中展示你的尝试吗?
【参考方案1】:
您使角色偏移的方法很聪明并且效果很好。这是一个使用示例:
import SwiftUI
@main
struct TestApp: App
var body: some Scene
WindowGroup
ContentView()
extension StringProtocol
subscript(offset: Int) -> Character
self[index(startIndex, offsetBy: offset)]
struct ContentView: View
@State var id: String = "12345"
@State var label1: Character = Character(" ")
@State var label2: Character = Character(" ")
var body: some View
VStack
Text("id: " + id)
Text("label1: " + String(label1))
Text("label2: " + String(label2))
.onAppear
label1 = id[0]
label2 = id[1]
【讨论】:
好的。只要提供了字符串,它就可以工作。如果我想从文本输入中读取字符串怎么办。当字符串为空时,它会在扩展上引发错误。 我会在一个新问题中问它。因为这回答了我所需要的。谢谢!【参考方案2】:你不能像那样访问id
,因为它还没有设置。
改为使用您自己的初始化程序:
@State var id: String
@State var label1: Character
@State var label2: Character
/* ... */
init(id: String)
self.id = id
label1 = id[0]
label2 = id[1]
【讨论】:
谢谢,但这样做不允许我在标签中显示它。 @Bnd10706 我不明白你的意思? 当我在 Label(label1, systemImage: "") .foregroundColor(.white) .frame(height: 48) 中尝试这个时 @Bnd10706 因为它返回Character
,正如您的下标所述。要将其转换为 String
,请执行 Label(String(label1), systemImage: "")...
'subscript(_:)' 不可用:不能用 Int 为 String 下标,请改用 String.Index。【参考方案3】:
这里有一个适合你的方法:
func characterOf(_ string: String, offset: Int) -> Character?
let array = Array(string)
if Array(string).indices.contains(offset)
return array[offset]
else
return nil
用例:
print(characterOf("Hello, world!", offset: 7) ?? "Error with offset!") // Result: Optional("w")
【讨论】:
以上是关于如何在 SwiftUI 中获取字符串索引?的主要内容,如果未能解决你的问题,请参考以下文章
当列表填充数组时,如何在 SwiftUI 中获取列表中元素的索引?