(SWIFT)(字符串,任何)不能转换为字符串
我正在使用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
(字符串,任意)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)