检查nil参数以及该参数在Swift中是否为空字符串

时间:2015-05-29 20:09:29

标签: swift react-native

可能有或没有更简单的方式来写这个,但我觉得自己是Swift的新手,我可能会遗漏一些东西。我有一个参数(fileName)用于一个可选的String?方法我需要检查它是nil,还是它是一个空字符串。这是我的代码,它工作正常,但似乎它可以更简洁/可读。

func writeFile(fileName: String?, withContents contents: String, errorCallback failureCallback: RCTResponseSenderBlock, callback successCallback: RCTResponseSenderBlock) -> Void {

  // If fileName has a value -- is not nil
  if let fileName = fileName {
    // Check to see if the string isn't empty
    if count(fileName) < 1 {
      // Craft a failure message
      let resultsDict = [
        "success": false,
        "errMsg": "Filename is empty"
      ]

      // Execute the JavaScript failure callback handler
      failureCallback([resultsDict])

      return; // Halt execution of this function
    }
    // else, fileName is nil, and should return the same error message.
  } else {
    // Craft a failure message
    let resultsDict = [
      "success": false,
      "errMsg": "Filename is empty"
    ]

    // Execute the JavaScript failure callback handler
    failureCallback([resultsDict])

    return; // Halt execution of this function
  }
}

3 个答案:

答案 0 :(得分:2)

怎么样

首先创建一个nil字符串可选来设置示例     var fileName:String?

现在,代码可以让您在一个简单的行中查看filename是否为nil / empty:

if (fileName ?? "").isEmpty
{
  println("empty")
}
else
{
  println("not empty")
}

这使用??,Swift“nil coalescing operator”。 (链接)

表达式:

a ?? b

a是可选的,它说:

如果a不是nil,则返回a。如果a为nil,则返回b。

所以

if (fileName ?? "").isEmpty

首先,评估fileName并查看它是否为零。如果是这样,请用空字符串替换它。

接下来,检查结果以查看它是否为空。

答案 1 :(得分:1)

你有正确的方法。您需要做的就是将您的IF语句组合成一行:

func writeFile(fileName: String?, withContents contents: String, errorCallback failureCallback: RCTResponseSenderBlock, callback successCallback: RCTResponseSenderBlock) -> Void {
  // Check if fileName is nil or empty
  if (fileName == nil) || (fileName != nil && count(fileName!) < 1) {
    // Craft a failure message
    let resultsDict = [
      "success": false,
      "errMsg": "Filename is empty"
    ]

    // Execute the JavaScript failure callback handler
    failureCallback([resultsDict])

    return; // Halt execution of this function
  }

  // Perform code here since fileName has a value and is not empty
}

此代码首先检查fileName是否为nil。如果是,则进入故障块。如果没有,则进入第二个条件。在第二个条件中,如果fileName具有值且为空,则它将进入失败块。仅当fileName具有值且不为空时,才会跳过失败块。

答案 2 :(得分:0)

您可以将if letif语句组合成以下内容:

if let str = fileName where !str.isEmpty {
    println(str)
} else {
    println("empty")
}

如果您在检查文件名是nil还是空白后需要使用文件名,这种方法很有用。