Swift中的字符串格式可选参数

Swift中的字符串格式可选参数,swift,Swift,奥拉 我不需要对快速的语言有太多的了解。我想把一些变量打印成字符串,其中一些是可选的 func onRegPin(timeOut: Int64, pin: String?)->() { String(format: "Timeout: %d Pin: %@", timeOut, pin!) } 如果pin在运行时为nil,我会得到一些断言或其他东西 是否有方法使用字符串打印此可选参数 func onRegPin(timeOut: Int64, pin: String?)->

奥拉

我不需要对快速的语言有太多的了解。我想把一些变量打印成字符串,其中一些是可选的

func onRegPin(timeOut: Int64, pin: String?)->()
{
  String(format: "Timeout: %d  Pin: %@", timeOut, pin!)
}
如果pin在运行时为nil,我会得到一些断言或其他东西

是否有方法使用字符串打印此可选参数

 func onRegPin(timeOut: Int64, pin: String?)->()
    {  if let pin = pin{
      String(format: "Timeout: %d  Pin: %@", timeOut, pin)
     }else{
      String(format: "Timeout: %d  No Pin ", timeOut)
      }
    }
更新:使用默认参数

func onRegPin(timeOut: Int64, pin:String?="No pin"){
  String(format: "Timeout: %d  Pin: %@", timeOut, pin!)
}
如果pin为nil,则仅在
超时时调用函数

onRegPin(3423)
否则,如果pin不为零:

onRegPin(3423, pin:"Pin")
更新:使用默认参数

func onRegPin(timeOut: Int64, pin:String?="No pin"){
  String(format: "Timeout: %d  Pin: %@", timeOut, pin!)
}
如果pin为nil,则仅在
超时时调用函数

onRegPin(3423)
否则,如果pin不为零:

onRegPin(3423, pin:"Pin")
您可以这样做:
如果
pin
nil
pinValue
为空字符串,否则未包装的
pin
值为空字符串

func onRegPin(timeOut: Int64, pin: String?)->()
{
  let pinValue = pin ?? ""
  String(format: "Timeout: %d  Pin: %@", timeOut, pinValue)
}
您可以这样做:
如果
pin
nil
pinValue
为空字符串,否则未包装的
pin
值为空字符串

func onRegPin(timeOut: Int64, pin: String?)->()
{
  let pinValue = pin ?? ""
  String(format: "Timeout: %d  Pin: %@", timeOut, pinValue)
}

您需要的是在使用之前打开可选的。Swift 1.2中的标准方法是使用
if let
(还有@vadian的答案中的“零合并”)

另外,函数应该返回一个字符串,在我的示例中,它是可选的,因为它可能会失败:

func onRegPin(timeOut: Int64, pin: String?) -> String? {
    if let pinOK = pin {
        return String(format: "Timeout: %d  Pin: %@", timeOut, pinOK)
    }
    return nil
}

if let regpin = onRegPin(30, "test") {
    println(regpin)   // prints "Timeout: 30  Pin: test"
}
对于Swift 2(Xcode 7),它可以是:

func onRegPin(timeOut: Int64, pin: String?) -> String? {
    guard let pinOK = pin else { return nil }
    return String(format: "Timeout: %d  Pin: %@", timeOut, pinOK)
}

if let regpin = onRegPin(30, pin: "test") {
    print(regpin)
}

您需要的是在使用之前打开可选的。Swift 1.2中的标准方法是使用
if let
(还有@vadian的答案中的“零合并”)

另外,函数应该返回一个字符串,在我的示例中,它是可选的,因为它可能会失败:

func onRegPin(timeOut: Int64, pin: String?) -> String? {
    if let pinOK = pin {
        return String(format: "Timeout: %d  Pin: %@", timeOut, pinOK)
    }
    return nil
}

if let regpin = onRegPin(30, "test") {
    println(regpin)   // prints "Timeout: 30  Pin: test"
}
对于Swift 2(Xcode 7),它可以是:

func onRegPin(timeOut: Int64, pin: String?) -> String? {
    guard let pinOK = pin else { return nil }
    return String(format: "Timeout: %d  Pin: %@", timeOut, pinOK)
}

if let regpin = onRegPin(30, pin: "test") {
    print(regpin)
}

好吧,我们的想法是不检查“pin”或为铸造引入新的var,还有另一种解决方案,如println:

字符串(格式:“超时:%d针:%@”,超时“\(针)”)


好吧,我们的想法是不检查“pin”或为铸造引入新的var,还有另一种解决方案,如println:

字符串(格式:“超时:%d针:%@”,超时“\(针)”)


虽然这对于日志记录很好,但应该注意,如果要在某处显示此字符串,“字符串插值生成可选值的调试说明”-结果将类似于“可选(…)”。虽然这对于日志记录很好,但应该注意,如果要在某处显示此字符串,“字符串插值生成可选值的调试说明”-结果类似于“可选(…)”。