在Swift中将Int转换为String并删除可选的包装?

时间:2017-11-07 19:09:53

标签: swift

我正在尝试将Int?转换为String并将其分配给标签而不包含可选文本。我目前有:

struct Choice: Mappable{

    var id: String?
    var choice: String?
    var questionId: String?
    var correct: Bool?
    var responses: Int?


    init?(map: Map) {

    }


    mutating func mapping(map: Map) {
        id  <- map["id"]
        questionId  <- map["questionId"]
        choice <- map["choice"]
        correct <- map["correct"]
        responses <- map["responses"]

    }


}

在访问它的班级

var a:String? = String(describing: self.currentResult.choices?[0].responses)
        print("\(a!)")

,输出为: Optional(1)

如何只输出1并删除可选文字?

2 个答案:

答案 0 :(得分:5)

aOptional,因此您需要先将String Int初始化程序应用于其中,然后再展开它。另外,如果您b Optional,则a无需nil。想要为let a: Int? = 1 let b = a.map(String.init) ?? "" // "" defaultvalue in case 'a' is nil String的情况提供默认值。

a

或者,如果目的是将可能存在且可能text - 可转换的UILabel值分配到let a: Int? = 1 if let newLabelText = a.map(String.init) { self.label.text = newLabelText } 的{​​{1}}属性,则可以指定使用可选绑定成功转换为标签:

select gsm.*
from (select gsm.*, row_number() over (partition by mobile_no order by usage_date_time desc) as seqnum
      from from gsm_usage gsm
     ) gsm
where seqnum = 1;

答案 1 :(得分:0)

为什么不呢?

let a : Int = 1
var b = "\(a)"
print(b)

所以

$ swift
[ 9> let a : Int = 1
a: Int = 1
[ 10> var b = "\(a)"
b: String = "1"
[ 11> print(b)
1

顺便提一下还有其他选项,比如这个

12> var c = a.description
c: String = "1"
 13> print(c)
1