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

Checking for nil parameter and if that parameter is an empty string in Swift

写这个可能有也可能没有更简单的方法,但我觉得自己是 Swift 的新手,我可能遗漏了一些东西。我有一个方法的参数 (fileName),它是一个可选的 String? 我需要检查它是否是 nil,或者它是否是一个空字符串。这是我的代码,它工作正常,但它似乎可以多一点 concise/readable.

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
  }
}

你的方法是对的。您需要做的就是将您的 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有值且不为空时才会跳过失败块。

怎么样

首先创建一个可选的nil字符串来设置示例 var 文件名:字符串?

现在的代码可以让您在一行中查看文件名是否为 nil/empty:

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

这里使用了??,Swift“nil coalescing operator”。 (link)

对于表达式:

a ?? b

其中 a 是可选的,它表示:

如果 a 不为零,return a。如果 a 为零,则 return b 代替。

所以

if (fileName ?? "").isEmpty

首先,评估文件名并查看它是否为零。如果是这样,请将其替换为空字符串。

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

您可以将 if letif 语句组合成这样:

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

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