swift如何删除可选的字符串字符

时间:2014-10-13 19:47:52

标签: string swift

如何删除可选字符


let color = colorChoiceSegmentedControl.titleForSegmentAtIndex(colorChoiceSegmentedControl.selectedSegmentIndex)

println(color) // Optional("Red")

let imageURLString = "http://hahaha.com/ha.php?color=\(color)"
println(imageURLString)
//http://hahaha.com/ha.php?color=Optional("Red")

我只想输出" http://hahaha.com/ha.php?color=Red"

我该怎么办?

... HMM

14 个答案:

答案 0 :(得分:101)

实际上,当您将任何变量定义为可选时,您需要打开该可选值。要解决此问题,您必须将变量声明为非选项或在变量后面放置!(感叹号)标记以解包选项值。

var temp : String? // This is an optional.
temp = "I am a programer"                
print(temp) // Optional("I am a programer")

var temp1 : String! // This is not optional.
temp1 = "I am a programer"
print(temp1) // "I am a programer"

答案 1 :(得分:42)

我再次查看了这个,我简化了我的回答。我认为这里的大部分答案都忽略了这一点。您通常希望打印您的变量是否具有值,并且您还希望程序不会崩溃(如果它没有使用!)。这就是这个

> :t (!!)
[a] -> Int -> a
> :t uncurry (!!)
([c], Int) -> c

这会给你空白或值。

答案 2 :(得分:23)

在尝试通过字符串插值使用之前,需要打开可选项。最安全的方法是通过optional binding

if let color = colorChoiceSegmentedControl.titleForSegmentAtIndex(colorChoiceSegmentedControl.selectedSegmentIndex) {
    println(color) // "Red"

    let imageURLString = "http://hahaha.com/ha.php?color=\(color)"
    println(imageURLString) // http://hahaha.com/ha.php?color=Red
}

答案 3 :(得分:10)

(venv) rgalbo@blueberry:~$ gcc --version gcc (Ubuntu 4.9.3-13ubuntu2) 4.9.3 中,您可以轻松删除可选

swift3

答案 4 :(得分:6)

除了其他答案中提到的解决方案,如果您想要始终避免整个项目的可选文本,您可以添加此窗格:

pod 'NoOptionalInterpolation'

https://github.com/T-Pham/NoOptionalInterpolation

pod添加了一个扩展来覆盖字符串插值init方法,以便一劳永逸地删除Optional文本。它还提供了一个自定义运算符*来恢复默认行为。

所以:

import NoOptionalInterpolation
let a: String? = "string"
"\(a)"  // string
"\(a*)" // Optional("string")

有关详细信息,请参阅此答案https://stackoverflow.com/a/37481627/6390582

答案 5 :(得分:3)

试试这个,

var check:String?="optional String"
print(check!) //optional string. This will result in nil while unwrapping an optional value if value is not initialized or if initialized to nil.
print(check) //Optional("optional string") //nil values are handled in this statement

如果您确信变量中没有nil,请先使用。

答案 6 :(得分:1)

尽管我们可能有不同的上下文,但以下内容对我有用。

我将变量的每个部分都放在方括号中,然后在右方括号外面添加一个感叹号。

例如,print(documentData["mileage"])更改为:

print((documentData["mileage"])!)

答案 7 :(得分:0)

简单地将?转换为!解决了我的问题:

usernameLabel.text = "\(userInfo?.userName)"

收件人

usernameLabel.text = "\(userInfo!.userName)"

答案 8 :(得分:0)

import UIKit

let characters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

var a: String = characters.randomElement()!
var b: String = characters.randomElement()!
var c: String = characters.randomElement()!
var d: String = characters.randomElement()!
var e: String = characters.randomElement()!
var f: String = characters.randomElement()!
var password = ("\(a)" + "\(b)" + "\(c)" + "\(d)" + "\(e)" + "\(f)")

    print ( password)

答案 9 :(得分:0)

当您将任何变量定义为可选变量时,则需要解开该可选值。到!

答案 10 :(得分:-1)

使用class Vehiculos(): def __init__(self, marca1, modelo1): self.marca = marca1 self.modelo = modelo1 self.enmarcha = False self.acelera = False self.frena = False def arrancar(self): self.enmarcha = True def acelerar(self): self.acelera = True def frenar(self): self.frena = True def estado(self): print("La marca es:", self.marca) print("El modelo es: ", self.modelo) class Moto(Vehiculos): pass mimoto = Moto("BMW", "CR1") mimoto.estado() """ La marca es: BMW El modelo es: CR1 """

为我工作!

答案 11 :(得分:-1)

print(“ imageURLString =” + imageURLString!)

只需使用!

答案 12 :(得分:-1)

您只需输入!即可使用:

print(var1) // optional("something")

print(var1!) // "something"

答案 13 :(得分:-1)

您好,我遇到了我遇到的相同问题(可选)(3) 所以,我尝试了下面的代码

cell.lbl_Quantity.text =“(数据?。数量!)” //“可选(3)”

让数量=数据?数量

cell.lbl_Quantity.text =“(数量!)” //“ 3”