2016-05-06 13 views
-2

Я учусь, как сделать таблицу умножения в быстрой и используетсяТаблица умножения в Swift КСН

override func viewDidLoad() { 
    let n = Int(str)! 

    while (i<=10) { 


     let st = "\(n) * \(i) = \(n * i)" 
     lbl.text = st 

     i += 1 

    } 

этот код. У меня есть метка, в которой я хочу показать таблицу, но проблема в том, что отображается только последний результат, который, как говорят, 2 * 10 = 20, а не все другое значение. я смущен, что делать, пожалуйста, помогите, что делать, чтобы отображались все значения.

+1

Вы должны добавить текст на каждой итерации. –

ответ

2

Это потому, что каждый раз, когда цикл итерации, он перезаписывает предыдущее значение в label.text. Вам нужно добавить новое значение к существующему строковому значению в ярлыке, как это было предложено RichardG.

let n = Int(str)! 

    while (i<=10) { 


     let st = "\(n) * \(i) = \(n * i)" 
     lbl.text = lbl.text + " " +st //Append new value to already existing value in label.text 

     i += 1 

    } 

Существует также возможность выпуска пользовательского интерфейса. Вы должны указать количество строк на этикетке или испортить дисплей. Он также должен иметь размер, достаточный для хранения ваших данных. Лучшим вариантом будет UITextView, который прокручивается, если вы не хотите обрабатывать случаи для высоты и ширины этикетки. Но если вы хотите придерживаться UILabel, следующий код будет изменять метку в зависимости от текста для вас:

lbl.numberOfLines = 0; //You only need to call this once. Maybe in `viewDidLoad` or Storyboard itself. 
lbl.text = @"Some long long long text"; //here you set the text to label 
[lbl sizeToFit]; //You must call this method after setting text to label 

Вы также можете справиться с этим с помощью Autolayout constraints.

6

Рад, что вы решили изучить Свифт. Вы на правильном пути, но, как говорили другие, ваша заключительная итерация цикла заменяет содержимое lbl.text.

Существует много способов добиться того, чего вы хотите, но для таких проблем я бы предложил начать работу на игровой площадке, а не беспокоиться о ярлыках, viewDidLoad и т. Д.

Вот хороший Swift-й способ делать то, что вы хотите

let n = 12 
let table = Array(0...10).map({"\(n) * \($0) = \(n * $0)"}).joinWithSeparator("\n") 
print("\(table)") 

дает ...

12 * 0 = 0 
12 * 1 = 12 
12 * 2 = 24 
12 * 3 = 36 
12 * 4 = 48 
12 * 5 = 60 
12 * 6 = 72 
12 * 7 = 84 
12 * 8 = 96 
12 * 9 = 108 
12 * 10 = 120 

Чтобы разрушить это ...

 // Take numbers 0 to 10 and make an array 
Array(0...10). 

     // use the map function to convert each member of the array to a string 
     // $0 represents each value in turn. 
     // The result is an array of strings 
map({"\(n) * \($0) = \(n * $0)"}). 

     // Join all the members of your `String` array with a newline character 
joinWithSeparator("\n") 

Попробуйте сами. В Xcode, File -> New -> Playground и просто вставьте этот код. Удачи!

+1

Это Удивительно .. :) – itsji10dra

1

Легкий способ сделать это с СВИФТ 2,0

var tableOf = 2 //Change the table you want 
for index in 1...10 { 

    print("\(tableOf) X \(index) = \(index * tableOf)") 

} 

ВЫХОДА

enter image description here

Смежные вопросы