为了熟悉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字符),所以我在循环中添加了一个条件来忽略这些字符。我改了代码。
发布于 2018-10-15 03:24:10
为什么你要重新发明轮子?
Swift有一个API可以将字符串转换为具有不同基数的数字。
let myBaseFrom = 2
if let result = Int(myBase.stringValue, radix: myBaseFrom) {
resultLabel.stringValue = String(result)
} else {
resultLabel.stringValue = "Conversion failed"
}顺便说一下,101 base 2是5
https://stackoverflow.com/questions/52805465
复制相似问题