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

hah*_*aha 60 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")
Run Code Online (Sandbox Code Playgroud)

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

我能怎么做?

嗯....

Raj*_*rya 106

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

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"
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一个老帖子,但我想我会清理几点,所以如果有人现在这样,他们会得到正确的信息.第一个println没有打印,接下来是var temp1:String!不需要!你只需要写var temp1:String //这不是一个可选项.另外在临时示例中,您可以打印temp的值,而不必使用Optional(),只需编写print(temp!)//"我是一个程序员",当然如果temp的值为nil使用!将导致错误,因此最好使用let或guard来保护您的代码免受零. (2认同)

Gre*_*egP 45

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

    print("color: \(color ?? "")")
Run Code Online (Sandbox Code Playgroud)

这会给你空白或价值.


Mik*_*e S 23

在尝试通过字符串插值使用它之前,需要打开可选项.最安全的方法是通过可选绑定:

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
}
Run Code Online (Sandbox Code Playgroud)


小智 10

使用"!"检查nil和unwrap:

let color = colorChoiceSegmentedControl.titleForSegmentAtIndex(colorChoiceSegmentedControl.selectedSegmentIndex)

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

if color != nil {
    println(color!) // "Red"
    let imageURLString = "http://hahaha.com/ha.php?color=\(color!)"
    println(imageURLString)
    //"http://hahaha.com/ha.php?color=Red"
}
Run Code Online (Sandbox Code Playgroud)


Mah*_*iri 10

swift3您可以轻松删除可选

if let value = optionalvariable{
 //in value you will get non optional value
}
Run Code Online (Sandbox Code Playgroud)


Tha*_*ham 6

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

pod 'NoOptionalInterpolation'
Run Code Online (Sandbox Code Playgroud)

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

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

所以:

import NoOptionalInterpolation
let a: String? = "string"
"\(a)"  // string
"\(a*)" // Optional("string")
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此答案/sf/answers/2623713921/.