将字符串与Optional与非可选字符串进行比较

时间:2016-11-28 09:58:36

标签: if-statement swift3

它们都是相同的字符串吗?

enter image description here

我尝试打印它们,以下是回复:

enter image description here

尝试比较它们时,结果是false

enter image description here

我无法理解,虽然他们两个字母在阿拉伯语中是相同的,但它仍然说,他们不是!

以下是有关正在发生的事情的更具背景的图片:

enter image description here

2 个答案:

答案 0 :(得分:2)

取决于:

这是一个非可选的i

let a = "i" // "i"

这是一个可选的i

let b : String? = "i" // "i"

ab相等

a == b // true

但是,这是使用String Interpolation

创建的可选i
let c = "\(b)" // "Optional("i")"

现在ac 相等

a == c // false

此比较为false,因为字符串插值会在字符串中添加文字Optional

答案 1 :(得分:0)

根据CRD的评论,Optional具有误导性。事实证明,看似类型Optional实际上是一个字符串。以下是我更改代码以比较第一个字母的方式:

for song in allSongs{
   let firstLetter = song.name?.characters.first
   var index = 0
   for letter in sectionTitles{
       if(letter.characters.first == firstLetter){
           break;
       }
       index += 1
   }
   var array = sectionedSongs[index]
   array.append(song)
}

注意sectionedSongs只是一个数组数组。