2015-05-20 2 views
1

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

организовать элементы, я рассмотрел поместив их в перечисление:

enum elements: Double { 

case Na = 22.99 

case O = 16.01 

case H = 1.00 

} 

var array: [(Int, String)] = [(number, element)]() 

, где «номер», однако многие из этого элемента в соединении. например, H2O будет var array = [(2, H), (1, O)]

тогда я думал, что буду добавлять к массиву любые элементы в текстовом поле. например, если бы это был гидроксид натрия, NaOH, массив читал бы: var array = [(1, Na), (1, 0), (1, H)]

тогда я бы сделал цикл for, чтобы подсчитать общее значение и добавить его вместе, и напечатать это значение в метке.

У меня возникли проблемы с добавлением элементов в массив на основе того, что находится в текстовом поле. есть идеи? Благодарю.

+0

Здесь есть интересная проблема синтаксического анализа текста, но недостаточно информации для ее работы. Здесь у вас есть представление о том, как вы можете структурировать свои данные, это здорово, теперь покажите нам, какой ввод вы хотите поддерживать в текстовом поле и какую структуру данных вы хотите сгенерировать. В некоторых примерах использования перед нами мы все можем начать понимать, как вы можете преобразовать текст в структурированные данные. – Jonah

ответ

0

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

enum elements: String { 
    case Na = "Na" 
    case H = "H" 
    case O = "O" 
} 

let sodium = elements(rawValue: "Na") 

println(sodium!.rawValue) // => "Na" 

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

let molecularWeights:[elements: Double] = [ 
    .Na: 22.99, 
    .O: 16.01, 
    .H: 1.00 
] 

println(molecularWeights[.Na]!) // => "22.99" 
Смежные вопросы