条件绑定的初始化程序必须具有可选类型,而不是“字符串”在干净构建后不起作用
Posted
技术标签:
【中文标题】条件绑定的初始化程序必须具有可选类型,而不是“字符串”在干净构建后不起作用【英文标题】:Initializer for conditional binding must have Optional type, not 'String' not working after clean build 【发布时间】:2021-01-28 17:32:44 【问题描述】:干净构建后 swift 代码无法正常工作。
如何重写这个简单的代码?
if let name: String = String(cString: (interface?.ifa_name)!), name == "utun0"
print("Ipfound")
ipFound = true;
我放了图片以便更好地理解。
【问题讨论】:
邮政编码作为文本而不是图像。对于 not 返回可选值的方法/构造函数,使用if let ...
是没有意义的。此外,您不能先let
声明变量,然后再尝试为其赋值。
添加代码,而不是代码图片!我想在这里提供帮助,而不是复制你的代码,我正在输入它
是的,请编辑您的问题以包含您的(格式化)代码,而不是代码图片。为了提出修复建议,我不得不重新输入您的代码。
我很抱歉添加图片......不会再发生...... :)
【参考方案1】:
if let
构造用于可选的“条件绑定”。您尝试分配给 name
(函数结果)的东西不是可选的 - 相反,您传递给 String(cString:,name:)
的值是可选的。
你应该把你的代码改写成这样:
if let interfaceName = interface?.ifa_name
let name = String(cString: interfaceName)
if name == "utun0"
print("Ipfound")
ipFound = true
else
print("name != Ipfound")
else
print("interface or interface.ifa_name is nil")
在该代码中,我使用可选绑定来尝试从 interface?.ifa_name
获取非零值。
如果您尝试使用!
“强制展开”运算符,如果interface
为nil,或者interface.ifa_name 为nil,您的代码将崩溃。
编辑:
处理这个问题的另一种方法是在Optional
上使用map()
:
if let name: String = interface?.ifa_name.map ( String(cString: $0)),
name == "utun0"
print("Ipfound")
ipFound = true;
作用于 Optional 的 map()
形式将 Optional 作为输入。如果该可选项为 nil,则返回 nil。如果可选项不是 nil,map()
返回的结果是将闭包应用到未包装的可选项的结果。
【讨论】:
以上是关于条件绑定的初始化程序必须具有可选类型,而不是“字符串”在干净构建后不起作用的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定的初始化程序必须具有可选类型,而不是 swift 3 中的“字符串”
条件绑定的初始化程序必须具有可选类型,而不是“字符串” - ios - swift
条件绑定的初始化程序必须具有可选类型,而不是“字符串”在干净构建后不起作用
ios:条件绑定的初始化程序必须具有可选类型,而不是“LOTAnimationView”
条件绑定的初始化程序必须具有可选类型,而不是 '[NSObject: AnyObject]' SwiftyJSON [重复]