如何删除可选字符
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
答案 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”