可能有或没有更简单的方式来写这个,但我觉得自己是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
}
}
答案 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 let
和if
语句组合成以下内容:
if let str = fileName where !str.isEmpty {
println(str)
} else {
println("empty")
}
如果您在检查文件名是nil
还是空白后需要使用文件名,这种方法很有用。