传递一个可以为零的对象

时间:2017-07-23 13:56:03

标签: swift

我正在尝试调用一个方法并传递两个参数,有时其中一个参数可以为nil。

storeMembershipInfo(photoData, textField.text!)

photoData声明为

var photoData: Data!

并且可以保存图像选择器中的数据,但不一定要有值。

在解开可选项时,我发现错误为零。即使它是零,我怎么能快速传递photoData?我在后面的被调用方法中检查了nil的情况,如果我把它作为可选项,swift要求我强制打开它。

2 个答案:

答案 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