Apple 的文档和许多文章建议您只需调用即可将子字符串(string.subsequence)转换为字符串String(substring)
,事实上这是有效的。
let str = "Hello world"
let hello = str.prefix(5) //create substr
//CREATE STRING FROM SUBSTRING
let hellostr = String(hello) //works
但是,当子字符串是可选的,如下所示,
let str = Optional("Hello world")
let hello = str?.prefix(5) //create substr
//CREATE STRING FROM OPTIONAL SUBSTRING
let hellostr = String(hello) //gives error
我收到了错误
"No exact matches in call to initializer "
什么原因可能导致这个错误?
谢谢您的任何建议。
您需要解开 Optional ,
Substring
因为您不能直接String
从 Optional创建一个Substring
。您需要决定如何处理
nil
值hello
,然后在此基础上选择适当的选项。以下是一些选项:
用于在可选项具有非零值的情况下创建
Optional.map
一个非可选项,如果可选项为,则分配给结果/String
Substring
nil
nil
如果你总是想要
hellostr
一个值,你需要提供一个默认值,或者返回Optional.map
或者(正如 Martin R 在评论中指出的那样)传递
Optional<Substring>
给String.init
:您还可以使用可选绑定来替换
Optional.map
更详细的语法