首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >国产可可变频器(swift)

国产可可变频器(swift)
EN

Stack Overflow用户
提问于 2018-10-15 01:52:40
回答 1查看 62关注 0票数 0

为了熟悉swift语言和Cocoa,我决定创建一个小的基数转换,首先从基数2到10,然后我想添加一些其他的基数,比如16和5。我仍然不能让它正常工作:Running App View Controller 4 digits and more debugger removes the whitespace

代码语言:javascript
复制
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,但我在它的设置或文档中没有找到任何“有用的”东西。我很确定这是一个愚蠢的错误,但如果没有你的帮助,我似乎无法摆脱它。提前谢谢你,阿蒂奥姆

编辑:以防有人关心: NSTextField添加了一个'á‘(160个ascii字符),所以我在循环中添加了一个条件来忽略这些字符。我改了代码。

EN

回答 1

Stack Overflow用户

发布于 2018-10-15 03:24:10

为什么你要重新发明轮子?

Swift有一个API可以将字符串转换为具有不同基数的数字。

代码语言:javascript
复制
let myBaseFrom = 2
if let result = Int(myBase.stringValue, radix: myBaseFrom) {
    resultLabel.stringValue = String(result)
} else {
    resultLabel.stringValue = "Conversion failed"
}

顺便说一下,101 base 25

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52805465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档