2015-11-13 3 views
2

Я пытаюсь сравнить строковые значения. Значения строк хранятся в словаре. Когда я разворачивать данные, как это:String cast vs String unwrapping

let type:String = basicBlk["type"] as! String 

и сравнить

print (type.lowercaseString == "minion") результат верно

Хотя, если я бросаю так:

let type:String = String(basicBlk["type"]) 

и сравнить

print (type.lowercaseString == "minion") результат ложной

Я хотел бы понять, что именно это различие.

+0

В какой версии XCode вы используете? Ваш код не компилируется в моем XCode 7.1. – courteouselk

+0

@ Антенна Xcode 7.1. basicBlk - Словарь – katch

ответ

1

Это

let type:String = String(basicBlk["type"]) 

Преобразует необязательное значение в строку, которая выглядит как:

Optional("Minion") 

И когда вы конвертировать эту строку в нижний регистр, он выглядит следующим образом:

optional("minion") 

Проблема в том, что вы создаете строковое представление необязательного значения и включаете строку «Optional( "и строка" ) "в результирующем значении.

Просто напечатайте type для обоих ваших двух примеров, и вы увидите, что я имею в виду.