2015-04-04 2 views
0

Я хранение высот в моей базе данных, как 62 или 511 вместо 6 футов 2 или 5 футов 11.Как вставить строку в другую строку после определенной буквы?

Это как я готовлю строку, которая будет сохранена:

let height = 6 ft 2 
    let myNewString = height.stringByReplacingOccurrencesOfString(" ft ", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 
    println(myNewString) // 62 

Что Я бы хотел сделать то же самое, что и при отображении данных из базы данных.

Поэтому я хотел бы взять возвращенную «62» из базы данных и вставить в нее эту строку «ft». Моя цель состоит в том, чтобы в итоге получилось «6 футов 2» для отображения в приложении.

Как я могу это сделать?

Я хочу, чтобы не хранить в моей базе два столбца, посвященных высоте. Я знаю, как конкатенировать строки, но это не совсем конкатенация строки. Я вставляю его в существующую строку.

Я был бы признателен за эффективный способ сделать это. Некоторое время смотрел вокруг и не мог найти своего решения.

Спасибо за ваше время.

Update:

После прочтения комментариев я задаюсь вопросом, если было бы лучше, чтобы добавить десятичную точку после первого символа в строке, например 4,2, 4,10, 5,4, 5,11, 6,2 и т.д.

let height = 6 ft 2 
let myNewString = height.stringByReplacingOccurrencesOfString(" ft ", withString: ".", options: NSStringCompareOptions.LiteralSearch, range: nil) 
println(myNewString) // 6.2 
+2

Ваше представление неоднозначно. '111' может быть' 11 футов 1' или '1 фт 11'. –

+0

мин. Возраст 4 фута 0 и макс 7 футов 11 @MartinR – LondonGuy

+0

Ох! Я понимаю, о чем вы говорите. Я полностью пропустил это. Вернемся к чертежной доске для меня. Может быть, я могу добавить десятичную точку после первого символа – LondonGuy

ответ

2

Это, вероятно, будет лучшей идеей, чтобы сохранить высоту чисто в дюймах (например, магазин 74 для 6'2")

В любом случае:.

let input = "62" 
    let feet = (input as NSString).substringToIndex(1) 
    let inches = (input as NSString).substringFromIndex(1) 
    let output = "\(feet) ft \(inches)" 

Если вам не нравится использование NSString, вы можете избежать его таким образом:

let input = "62"; 
    let feet = input.substringToIndex(input.startIndex.successor()) 
    let inches = input.substringFromIndex(input.startIndex.successor()) 
    let output = "\(feet) ft \(inches)" 
+0

Я думал о хранении как 4'0 ", но причина, по которой я не делал этого, заключалась в том, что у меня было такое впечатление, что я не смогу использовать этот формат с например, запрос, где высота больше ..... и меньше. Я думал, что это будет работать только с целыми числами. Но я сейчас разбираюсь и вручную отредактировал некоторые поля и щелкнул заголовок столбца и поля были поставлены в правильном порядке (наименьшая высота до наивысшей), так что угадайте, что это тоже будет работать в коде. Поэтому я могу просто хранить как, например, 6'2 "и показывать этот путь также. – LondonGuy

+0

Вы уверены, что '5'10" 'будет сортировать после' 5'2 "'? –

+0

Я был неправ. Это хорошо работает для меня. – LondonGuy

2

Свифта String соответствует RangeReplaceableCollectionType, который имеет метод splice - splice позволяет вставлять коллекцию в другую коллекцию. Поскольку строки коллекции, это означает, что вы можете написать:

var height = "62" 
if !height.isEmpty { 
    height.splice(" ft ", atIndex: height.startIndex.successor()) 
} // height is now "6 ft 2" 

В качестве альтернативы, если вы знаете, что вы хотите только первый символ перед «фут» вы можете сделать:

let height = "62" 
if let feet = first(height) { 
    let inches = dropFirst(height) 
    let heightWithFt = "\(feet) ft \(inches)" 
} 
Смежные вопросы