gpt4 book ai didi

swift - 自制 cocoa 基础转换器( swift )

转载 作者:行者123 更新时间:2023-11-30 11:05:12 24 4
gpt4 key购买 nike

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

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 字符),因此我添加了在循环中添加一个条件来忽略此类字符。我更改了代码。

最佳答案

为什么要重新发明轮子?

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

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

顺便说一句,101基数25

关于swift - 自制 cocoa 基础转换器( swift ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52805465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com