Самодельный базовый конвертер с какао (swift) - PullRequest
0 голосов
/ 14 октября 2018

Чтобы познакомиться с быстрым языком и какао, я решил создать небольшое преобразование базы, сначала из базы 2 в 10, затем я хотел бы добавить некоторые другие базы, такие как 16 и 5. Тем не менее, я не могу сделатьон работает правильно: Запущенное приложение Просмотр контроллера 4 цифры и более Отладчик удаляет пробелы

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var baseFrom: NSPopUpButton!
    @IBOutlet weak var baseTo: NSPopUpButton!
    @IBOutlet weak var myBase: NSTextField!
    @IBOutlet weak var testLabel: NSTextField!
    @IBOutlet weak var resultLabel: NSTextField!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }

    @IBAction func convertButton(_ sender: Any)
    {
        let popUpChoice = baseFrom.titleOfSelectedItem! //the choice of the popUpButton (only 2 possible yet)
        var index : Int = 0 //useless
        var baseToConvert : Int = 0 //stocks the 10 base
        var myBaseFrom : Int // the original base (here : 2)
        var isOk : Bool = true //check that the base is a 2 binary base
        var test : Int

        if popUpChoice == "2"
        {
            let setBase  = myBase.stringValue
            var correctedReverseBase : String = ""
            for char in setBase
            {
                if char == "0" || char == "1" || char == "\0"
                {
                    index += 1 // useless (needed for tests)
                    correctedReverseBase += String(char)

                }
                else
                {
                    resultLabel.stringValue = "recommencer" // base not okay !
                    test = Int(char.unicodeScalars[char.unicodeScalars.startIndex].value)
                    if test > 32 && test < 127
                    {
                        isOk = false
                    }

                }
            }
            myBaseFrom = 1
            let reverseBase = String(correctedReverseBase.reversed())
//            let correctedReverseBase = String(reverseBase.filter { !" \n\t\r".contains($0) })

            if isOk // if the base is correct
            {
                for char in reverseBase
                {
                    baseToConvert += Int(String(char))! * myBaseFrom // convert form 2 to 10
                    myBaseFrom *= 2
                }
                resultLabel.stringValue = String(baseToConvert) //show result
                //                resultLabel.stringValue = String(reverseBase)
            }
        }
    }
}

приложение работает без сбоев, пока я не добавляю двоичные числа длиннее 4 цифр (он конвертирует 101 в 5, как вы можете видеть на моем втором рисунке).

Я не понимаю, почемуон просто перестает работать после 4 цифр.Я думаю, что проблема может исходить из NsTextField, но я не нашел ничего «полезного» в его настройках или документации.Я уверен, что это глупая ошибка, но, похоже, я не смогу избавиться от нее без вашей помощи.Заранее спасибо, Artiom

РЕДАКТИРОВАТЬ: На случай, если кому-то все равно: NSTextField добавляет 'á' (160 символов ascii), поэтому я добавляю, чтобы добавить условие в цикл, чтобы игнорировать такие символы.Я изменил код.

1 Ответ

0 голосов
/ 14 октября 2018

Почему вы заново изобретаете колесо?

У Swift есть API для преобразования строки в число с разными основаниями.

let myBaseFrom = 2
if let result = Int(myBase.stringValue, radix: myBaseFrom) {
    resultLabel.stringValue = String(result)
} else {
    resultLabel.stringValue = "Conversion failed"
}

Кстати 101 база 2 is 5

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