(SWIFT)(字符串,任何)不能转换为字符串

(SWIFT)(字符串,任何)不能转换为字符串,swift,xcode6.1,Swift,Xcode6.1,我正在使用swift制作一个应用程序来监控我的电池信息,但是我从这行代码中获得了一个(字符串,任意)id,不能转换为字符串,其中binfo.stringValue=x.battery[“DesignCapacity”],其中binfo是一个GUI标签 以下是完整的代码: import Cocoa func executeCommand(command: String, args: [String]) -> String { let task = NSTask() tas

我正在使用swift制作一个应用程序来监控我的电池信息,但是我从这行代码中获得了一个
(字符串,任意)id,不能转换为字符串
,其中binfo.stringValue=x.battery[“DesignCapacity”]
,其中binfo是一个GUI标签

以下是完整的代码:

import Cocoa
func executeCommand(command: String, args: [String]) -> String {

    let task = NSTask()

    task.launchPath = command
    task.arguments = args

    let pipe = NSPipe()
    task.standardOutput = pipe
    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)!

    return output

}

extension Array {
    func combine(separator: String) -> String{
        var str : String = ""
        for (idx, item) in enumerate(self) {
            str += "\(item)"
            if idx < self.count-1 {
                str += separator
            }
        }
        return str
    }
}

extension String{
    func replace(x:String,y:String) -> String{
        var z = self.stringByReplacingOccurrencesOfString(x, withString: y, options: NSStringCompareOptions.LiteralSearch, range: nil)
        return z
    }
}


extension String{
    func split(delimiter:String) -> Array<String>{
        return self.componentsSeparatedByString(delimiter)
    }
}




func get_key_and_value(string:String) -> Array<Any>{
    var x = string.split(" = ")
    if x[1].toInt() != nil{
        return [x[0],x[1].toInt()]
    }  else if x[1] == "Yes"{
        return [x[0],true]
    } else if x[1] == "No"{
        return [x[0],false]
    } else {
        return [x[0],x[1]]
    }
    //return [return_val[0],return_val[1]]
}

class Battery{
    var battery = Dictionary<String, Any>()
    init(){
        refreshValues()
    }
    internal func refreshValues(){
        let commandOutput:String = executeCommand("/usr/sbin/ioreg", ["-r","-w0","-cAppleSmartBattery"])
        var commandOutList = commandOutput.split("\n")

        commandOutList.removeAtIndex(0)
        commandOutList.removeAtIndex(0)

        for _ in 1...5{
            var lastRemoved = commandOutList.removeLast()
            if lastRemoved == "}"{
                break
            }
        }

        //Got Needed Infomation Only

        let commandOutStr = commandOutList.combine("")
        let cmdOutStr = commandOutStr.replace("\"",y: "").replace("    ",y: "\n")

        var cmdOutSplit = cmdOutStr.split("\n")
        cmdOutSplit.removeAtIndex(0)


        //var x = get_key_and_value(cmdOutSplit[0])
        //var key:String = x[0] as String
        //var value = x[1] as Any

        for x in cmdOutSplit{
            var y = get_key_and_value(x)
            battery[(y[0] as String).replace(" ", y: "")] = y[1] as Any
        }
    }
}

class ViewController: NSViewController {
    @IBOutlet weak var binfo: NSTextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        var x = Battery()
        println(x.battery["DesignCapacity"])
        binfo.stringValue = x.battery["DesignCapacity"]
        // Do any additional setup after loading the view.
    }



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


}

如果有人能帮忙,我们将不胜感激

您的代码应该在运行时进行一些更改

将int值添加到字典时,您正在添加可选的int。请使用
运算符以添加实际整数

if x[1].toInt() != nil{
    return [x[0],x[1].toInt()!]
}  else if x[1] == "Yes"{
然后(正如您所知,它是字典中的Int),您可以使用字符串构造函数将其转换为字符串

binfo.stringValue = String(x.battery["DesignCapacity"] as Int)

看起来您正在使用字符串键和可能包含int、bool或string的任意值构建字典。您确定
DesignCapacity
键实际上包含字符串值吗?DesignCapacity是一个整数。这就是为什么我尝试将
添加为字符串
以尝试转换它。我还知道它包含一个值,因为println函数返回Optional(Optional(6700))
binfo.stringValue = String(x.battery["DesignCapacity"] as Int)