web-dev-qa-db-fra.com

swift Comment supprimer un caractère de chaîne facultatif

Comment supprimer le caractère facultatif


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")

Je veux juste une sortie " http://hahaha.com/ha.php?color=Red "

Comment puis-je faire?

hmm ....

59
hahaha

En fait, lorsque vous définissez une variable comme une variable facultative, vous devez décompresser cette valeur facultative. Pour résoudre ce problème, vous devez soit déclarer la variable comme non-option, soit mettre un point (exclamation) derrière la variable pour décompresser la valeur de l'option.

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"
103
Rajesh

J'ai regardé cela de nouveau et je simplifie ma réponse. Je pense que la plupart des réponses ici manquent le point. Vous voulez généralement imprimer si votre variable a ou non une valeur et vous voulez aussi que votre programme ne se bloque pas s'il ne le fait pas (alors n'utilisez pas!). Voici juste ceci

    print("color: \(color ?? "")")

Cela vous donnera vide ou la valeur.

45
GregP

Vous devez déballer les éléments facultatifs avant d'essayer de les utiliser via une interpolation de chaîne. Le moyen le plus sûr de le faire est via reliure optionnelle :

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
}
23
Mike S

Vérifiez qu'il n'y en a pas et décompressez avec "!":

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"
}
10
yh_sss

Dans Swift3 vous pouvez facilement supprimer facultatif

if let value = optionalvariable{
 //in value you will get non optional value
}
10
Mahesh Giri

Outre les solutions mentionnées dans d'autres réponses, si vous souhaitez toujours éviter ce texte facultatif pour l'ensemble de votre projet, vous pouvez ajouter ce module:

pod 'NoOptionalInterpolation'

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

Le pod ajoute une extension pour redéfinir la méthode init d'interpolation de chaîne afin de supprimer le texte facultatif une fois pour toutes. Il fournit également un opérateur personnalisé * pour rétablir le comportement par défaut.

Alors:

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

Veuillez consulter cette réponse https://stackoverflow.com/a/37481627/6390582 pour plus de détails.

6
Thanh Pham

Essaye ça,

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

Allez-y en premier si vous êtes sûr de ne rien avoir dans votre variable.

3
Manoj Kumar