Быстрый выход из обратной косой черты не работает, как ожидалось

Когда я печатаю это:

print("dfi:.*\\{8766370\\}.*:6582.*")

результат в журнале выглядит как ожидалось:

>>>> dfi:.*\{8766370\}.*:6582.*

но когда я строю строку динамически, результат выглядит неправильно

let re = "dfi:.*" + "\\" + "{" + "\(section)" + "\\" + "}" + ".*:\(feed).*"
print(re)

>>>> dfi:.*\\{8766370\\}.*:6582.*"

Обратите внимание, что во втором случае "\" есть двойная косая черта, и я не уверен почему. Я попытался использовать одинарный или тройной слэш, но он все равно печатает неправильно.

РЕДАКТИРОВАТЬ - Добавление кода:

for (section,feeds) in toPurge {
  var regex = [String]()
  for feed in feeds {
    // dfi:\{(8767514|8769411|8768176)\}.*
    let re = "dfi:.*" + "\\" + "{" + "\(section)" + "\\" + "}" + ".*:\(feed).*"
    regex.append(re)
  }
  print(regex) // looks wrong ! bug in xcode?
  for r in regex {
    print(r) // looks perfect
  }
}

1 ответ

Решение

Вы буквально печатаете все внутри массива, который покажет вам debugDescription переменная, поэтому вы видите двойную косую черту. Он печатает буквальное значение строки, а не интерполированное значение, которое вы хотите.

Если вам нужны определенные элементы в массиве, вам нужно обратиться к элементам внутри него, просматривая его или обращаясь к определенному индексу.

Вот ваш код, показывающий это описание:

import Foundation
let toPurge = [(8767514,[6582])]
for (section,feeds) in toPurge {
  var regex = [String]()
  for feed in feeds {
    // dfi:\{(8767514|8769411|8768176)\}.*
    let re = "dfi:.*" + "\\" + "{" + "\(section)" + "\\" + "}" + ".*:\(feed).*"
    regex.append(re)
    print(re)
  }
  print(regex[0]) // correct
  print(regex) // prints debugDescription
  print(regex.debugDescription) // prints debugDescription
  for r in regex {
    print(r) // looks perfect
  }
}
Другие вопросы по тегам