斯威夫特如何从Int投射?要串起来

ycggw6v2  于 2022-09-19  发布在  Swift
关注(0)|答案(12)|浏览(127)

在SWIFT中,我不能将Int转换为字符串:

var iString:Int = 100
var strString = String(iString)

但我在Int?中的变量有错误:Cant invoke 'init' with type '@Ivalue Int?'

示例

let myString : String = "42"
let x : Int? = myString.toInt()

if (x != null) {
    // Successfully converted String to Int
    //And how do can i convert x to string???
}
az31mfrm

az31mfrm1#

您可以使用字符串内插。

let x = 100
let str = "(x)"

如果x是可选的,则可以使用optional binding

var str = ""
if let v = x {
   str = "(v)"
}
println(str)

如果您确定x永远不会是nil,则可以在optional value上执行forced unwrapping

var str = "(x!)"

在一条语句中,您可以尝试这样做

let str = x != nil ? "(x!)" : ""

根据@RealMae的评论,您可以使用nil coalescing operator (??)进一步缩短此代码

let str = x ?? ""
klr1opcd

klr1opcd2#

我喜欢为这个创建一些小的扩展:

extension Int {
    var stringValue:String {
        return "(self)"
    }
}

这使得调用可选的int成为可能,而不必解包和考虑nil值:

var string = optionalInt?.stringValue
5lhxktic

5lhxktic3#

如果您需要一行程序,可以通过以下方式实现:

let x: Int? = 10
x.flatMap { String(B1a0a1b) } // produces "10"
let y: Int? = nil
y.flatMap { String(B1a0a1b) } // produces nil

如果需要缺省值,只需使用

(y.flatMap { String(B1a1a1b) }) ?? ""

编辑:

没有大括号就更好了:

y.flatMap(String.init)

Apple's flatMap(_:) Documentation

2mbi3lxu

2mbi3lxu4#

可选Int->可选字符串:

如果x: Int?(或Double?-不重要)

var s = x.map({String(B1a0a1b)})

这将返回String?

要获取String,您可以使用:

var t = s ?? ""
63lcw9qa

63lcw9qa5#

希望这能有所帮助

var a = 50
var str = String(describing: a)
bwleehnv

bwleehnv6#

也许很粗糙,但你可以这样做:

let int100 = 100
println(int100.description) //Prints 100
oipij1gg

oipij1gg7#

Sonrobby,我相信“Int?”表示可选的int。基本上,根据我的理解,需要打开 Package 。

因此,执行以下操作可以很好地工作:

let y: Int? = 42
let c = String(y!)

那个“!”展开变量。希望这个能帮上忙!

正如rakehbs提到的,确保变量不是Nill。

kuarbcqp

kuarbcqp8#

为了获得as described here中的实际值,您需要“展开”可选的内容。您可以用“!”来展开选项。因此,在您的示例中,代码将为:

let myString : String = "42"
let x : Int? = myString.toInt()

if (x != null) {
    // Successfully converted String to Int
    // Convert x (an optional) to string by unwrapping
    let myNewString = String(x!)
}

或者在该条件下,您可以使用字符串插值法:

let myNewString = "(x!)" // does the same thing as String(x!)
a64a0gku

a64a0gku9#

为了防止不安全的可选展开,我按照@AntiStrike12的建议使用了如下方法:

if let theString = someVariableThatIsAnInt  {        
    theStringValue = String(theString!))
 }
djp7away

djp7away10#

SWIFT 3:

var iString:Int = 100
var strString = String(iString)
extension String {
    init(_ value:Int){/*Brings back String() casting which was removed in swift 3*/
        self.init(describing:value)
    }
}

这样可以避免在代码中使用详细的:String(describing:iString)

**奖励:**为常用类型添加类似的初始化方法,如:BoolCGFloat等。

lymnna71

lymnna7111#

您可以尝试此操作来转换Int?要串起来

let myString : String = "42"
let x : Int? = myString.toInt()

let newString = "(x ?? 0)"
print(newString)        // if x is nil then optional value will be "0"
oxosxuxt

oxosxuxt12#

如果未设置(Nil),则需要空字符串

extension Int? {
    var stringValue:String {
      return self == nil ? "" : "(self!)"
    }
}

相关问题