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

时间:2015-08-04 13:28:45

标签: swift

奥拉,

我不需要使用Swift语言。我想在String中打印一些变量,其中一些是可选的。

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

如果引脚在运行时为零,我会得到一些断言或其他东西。

有没有办法使用String打印这个可选参数?

4 个答案:

答案 0 :(得分:3)

你可以这样做:
如果array(3) { [0]=> array(4) { ["sort"]=> string(0) "" ["day"]=> string(2) "2" ["month"]=> string(1) "8" ["year"]=> string(4) "2015" } [1]=> array(4) { ["sort"]=> string(0) "" ["day"]=> string(1) "5" ["month"]=> string(1) "8" ["year"]=> string(4) "2015" } [2]=> array(4) { ["sort"]=> string(0) "" ["day"]=> string(1) "9" ["month"]=> string(1) "8" ["year"]=> string(4) "2015" } [3]=> array(4) { ["sort"]=> string(0) "" ["day"]=> string(2) "3" ["month"]=> string(1) "8" ["year"]=> string(4) "2015" } [4]=> array(4) { ["sort"]=> string(0) "" ["day"]=> string(1) "6" ["month"]=> string(1) "8" ["year"]=> string(4) "2015" } [5]=> array(4) { ["sort"]=> string(0) "" ["day"]=> string(1) "10" ["month"]=> string(1) "8" ["year"]=> string(4) "2015" } } pinValue,则pin为空字符串,否则为nil

pin

答案 1 :(得分:1)

 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只有timeOut

的nil调用函数
onRegPin(3423)

否则如果pin不是nil:

onRegPin(3423, pin:"Pin")

答案 2 :(得分:1)

您需要的是在使用之前打开Optional。 Swift 1.2中的标准方式是使用if let(还有" nil合并"就像@ vadian'答案一样)。

看起来你的函数应该返回一个String,在我的例子中它是一个Optional,因为它可能会失败:

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

答案 3 :(得分:1)

好想的是不检查" pin"或者为铸造引入新的var,还有另一种解决方案,如println:

  

字符串(格式:"超时:%d引脚:%@",timeOut," \(引脚)")