ios - 在 Swift 的函数参数中强制展开是如何工作的?
问题描述
我有一个功能Swift
,
func getValue(param: String!) -> String {
//access param
//return a string
}
通话就像,
let retVal = getValue(param: nil)
我预计参数会在考虑函数参数并崩溃时尝试强制展开。但是代码没有崩溃。谁能让我知道我错过了什么?
在签名的情况下会有什么不同,
func getValue(param: String?) -> String
解决方案
这!
意味着参数将保存 String 值或nil
. 因此,当您分配nil
给!
它时,它不应该崩溃。但是当您尝试访问该值时,它会崩溃。
您的代码中的这种修改将导致崩溃,因为我们试图访问变量中的值是nil
.
func getValue(param: String!) -> String {
if param.isEmpty {
return ""
}
return ""
}
let retVal = getValue(param: nil)
另一个例子:
var string: String!
string = nil //This will not crash, but after this line if you try to access or perform any operation on it, it will
现在关于这个func getValue(param: String?)
:
在这种情况下,param
将optional type
与上述情况不同。所以在这里你必须打开它。
推荐阅读
- python - 使用 write() 方法合并两个文本文件时删除了行
- c# - A way to add int value to textbox with a button click and then subtract from the int value with another button
- python - 从蒙特卡洛总结场景
- java - 从不同的类访问时方法不执行
- swift - 通过 Segue 将对象从表视图单元传递到另一个视图控制器
- node.js - 无法从 Gitlab CI/CD 在 AWS RDS 数据库中运行迁移
- eclipse - Maven API 在服务器(Tomcat 7)上部署时不响应
- excel - 如何在另一列的一列中查找值并返回找到值的行中的单元格
- c# - 从 edmx 模型调用实体框架创建的实体时出错
- ios - ios 构建大小在设备上更大