gpt4 book ai didi

swift - 为什么 Swift 的 enumerateSubstringsInRange 回调采用可选字符串?

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:19 25 4
gpt4 key购买 nike

我们可以像这样从 Swift 字符串中提取单词:

s.enumerateSubstringsInRange(s.characters.indices, options: .ByWords) {
(w,_,_,_) in print(w!)
}

但是强制展开通常是一种代码味道。它在那里是因为回调的第一个参数是 String?(可选)。我已经尝试了几种可能的字符串以强制函数将 nil 传递给回调(例如空字符串和没有单词字符的字符串)但没有成功!

所以我想知道为什么回调采用可选字符串。有什么我忽略的吗?是因为一个可变字符串可以同时传入和修改吗?如果是这样,那么如果我知道我的原始字符串是一个常量(用 let 定义),那么强制解包是否可以接受?

最佳答案

(以下信息来自对我问题的回复 https://forums.developer.apple.com/thread/28272在里面Apple 开发者论坛。)

您可以将 .SubstringNotRequired 选项传递给 enumerateSubstringsInRange(),然后闭包将被调用子串 == nil。这个选项是documented作为

NSStringEnumerationSubstringNotRequired

A way to indicate that the block does not need substring, in which case nil will be passed. This is simply a performance shortcut.

例子:

let str = "Hello, playground"  
str.enumerateSubstringsInRange(str.characters.indices,
options: [.ByWords, .SubstringNotRequired]) {
substring, substringRange, _, _ in
print(substring, substringRange)
}

输出:

nil 0..<5
nil 7..<17

我认为假设 substring != nil 是安全的,如果.SubstringNotRequired 选项未给出。

关于swift - 为什么 Swift 的 enumerateSubstringsInRange 回调采用可选字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33455976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com