我正在尝试调用一个方法并传递两个参数,有时其中一个参数可以为nil。
storeMembershipInfo(photoData, textField.text!)
photoData声明为
var photoData: Data!
并且可以保存图像选择器中的数据,但不一定要有值。
在解开可选项时,我发现错误为零。即使它是零,我怎么能快速传递photoData?我在后面的被调用方法中检查了nil的情况,如果我把它作为可选项,swift要求我强制打开它。
答案 0 :(得分:2)
一种方法是从以下位置更改变量的声明:
repeat 20 times
set theSearchstate to "not ready"
set checkIfSNIsCorrect to ""
set checkIfSNIsInvalid to ""
try
tell application "Google Chrome"
tell front window's active tab to set checkIfSNIsInvalid to execute javascript "document.getElementsByClassName('modal-body ng-scope')[0].innerHTML;"
## Invalid Serial
tell front window's active tab to set checkIfSNIsCorrect to execute javascript "document.getElementsByClassName('subheader ng-binding')[0].innerHTML;"
## SN and device ID
end tell
if theSearchstate is equal to "not ready" then
delay 1
else if checkIfSNIsCorrect contains serialNumber then
set theSearchstate to "Completed"
set checkIfSNIsCorrect to "SN is Correct"
exit repeat
else if checkIfSNIsInvalid contains "Serial Does Not Exists" then
set theSearchstate to "invalid S/N"
exit repeat
else if checkIfSNIsInvalid contains "serviceErrorWhileSearching" then
set theSearchstate to "Error with GCRM"
exit repeat
end if
on error
--
end try
end repeat
return theSearchstate
要:
var photoData: Data!
然后将您的函数签名更改为:
var photoData: Data?
这样您的函数就会接受选项,这意味着它可以接受func storeMembershipInfo(photoData: Date?, text: String)
==>当您想要将其作为参数发送给函数时,您不需要展开可选变量nil
。
答案 1 :(得分:1)
当您声明var
!
时,您基本上会说 - “这永远不会是零”。这不是你的代码的情况......
如果此var
可以保留为nil,则应将其声明为可选(?
)。
在您的功能中检查是否为零并继续相应,请在此处详细了解optionals