У меня в приложении пользователю задаются определенные вопросы, он отвечает, эти ответы сохраняются в приложении. Потом далее в приложении будет предоставлен рассказ для чтения, и в нем нужно вставить ответы пользователя (1-3 слова)
Например предварительно у пользователя узнали любимый цвет или продукт (он набрал в textField - мы сохранили ответ в массив под определённым ключом). Потом уже в самом рассказе его ответ должен вставиться в нужных местах.
Пока у меня только такая идея:
let answer = "зеленый"
потом далее
var textBlock1 = "Жили-были дед и баба, и был у них"
var textBlock2 = "кадилак, на котором они ездили за репкой"
И потом просто сложить Label.text = textBlock1+answer+textBlock2
Подставление значений в тексте
Хорошая история)
let colorKey = "%colorKey%"
let targetKey = "%targetKey%"
let color = "зеленый"
let target = "бананами"
var textBlock = "Жили-были дед и баба, и был у них \(colorKey) кадилак, на котором они ездили за \(targetKey)."
textBlock = textBlock.replacingOccurrences(of: colorKey, with: color)
textBlock = textBlock.replacingOccurrences(of: targetKey, with: target)
print(textBlock)
У меня новая проблема с подставлением значений в тексте
Если сам текст рассказа набирается прямо в коде, то никаких проблем с командой .replacingOccurrences, все отрабатывает корректно
Но текст у меня большой и хранится в plist-файле, из которого происходит загрузка. Я прямо в этом файле в тексте сразу вставил (colorKey), но никакого подставления значения программа не делает. Я подозреваю, что программа не производит “чтение” этого текста при подставления значения, и поэтому она “не видит” внутри (colorKey). Что можно тогда сделать?
текст хранится в Array в виде текстовых блоков, ниже пример кода
Он потом подставляется в Label. Для проверки проверял текст через print - он никак не поменялся
let heroNameKey = “%heroNameKey%”
someText = chapterText[pageNumber]
let heroNameString = “Batman”
pageText = someText.replacingOccurrences(of: heroNameKey, with: heroNameString)
Видимо, ты в другом месте накосячил. Приложи проект зипом или образец где нет секретных данных.
текст в plist копировался кстати из word файла, написанном в Windows… текст на русском - из-за шрифта может программа “не читает” текст?
попробую похожую минипрограммку сделать, для проверки… потом закину сюда если не найду выхода
Перед тем как тратить время проверь выбранную кодировку в ворде. А также, проверь чтобы не было rich text.
А какая нужна кодировка в Ворде, чтобы XCode “понимал” его корректно?
что такое rich text??
погуглил, но пока безрезультатно, понял только что Xcode лучше понимает HTML и UTF-8 (16). Попробовал через Блокнот пересохранить в UTF кодировке. Потом оттуда перекопировал в plist - ничего не поменялось…
ПРобовал еще такой вариант
let heroNameKey = “%heroNameKey%”
someText = chapterText[pageNumber]
let cString = someText.cString(using: .utf8)!
let heroNameString = “Amiko”
pageText = cString.replacingOccurrences(of: heroNameKey, with: heroNameString)
print(pageText)
Но тут cString получается как [CChar] у которого нет команды replacingOccurrences
Может есть другой способ перекодировки?
Вот например кусок текста:
heroNameKey, я вижу по нашей программе (heroNameKey) уже получил 5 за 1 день. Поздравляю! Неплохое начало, но это еще не всё – впереди тебя ждут еще много новых испытаний и приключений. И если ты пройдешь все испытания и получишь все медали – ты сможешь …
Тут в тексте я уже пробовал разные варианты прописания маркера
Как я и предполагал с самого начала ))))))
В тексте нужно вставлять сам маркер, а не его переменную из кода, т.е. %heroNameKey% вместо heroNameKey
И все у вас заработает без кодировок, с любым языком.
Точно!! -))
Все получилось без всяких перекодировок. Причем я просто убрал эти значки %% при объявлении heroNameKey - и в тексте все стало нормально.
Я думал эти значки нужны по синтаксису для подставления.
Спасибо!-)
Я имел в виду немного наоборот. Значки эти как раз в тексте и нужны, что бы в тексте проще было видно маркеры.
В тексте должно быть так:
%heroNameKey%, я вижу по нашей программе (%heroNameKey%) уже получил 5 за 1 день. Поздравляю! Неплохое начало, но это еще не всё – впереди тебя ждут еще много новых испытаний и приключений. И если ты пройдешь все испытания и получишь все медали – ты сможешь …
В коде так:
let heroNameKey = “%heroNameKey%”
someText = chapterText[pageNumber]
let heroNameString = “Batman”
pageText = someText.replacingOccurrences(of: heroNameKey, with: heroNameString)
И это не обязательно должны быть значки %. Тут может быть что угодно. Главное придумать такую комбинацию для маркера, что бы он никогда не смог совпасть с каким либо нужным текстом.
привет, ты писал, что “в текстфилде текст не бывает nil, даже если ты присваиваешь ему nil, он будет “”. Пользуйся деббагером и смотри что находится в переменных.”
Ну вот смотри, я опять наткнулся на похожую ситуацию и решил проверить, как ты сказал - посмотреть значение через дебагер. И он показывает nil.