Search code examples
swiftxcode6.1

(SWIFT) (String,Any) is not convertible to String


I am making an application using swift to monitor my battery information however I get a (String,Any) id not convertible to String from this line of code binfo.stringValue = x.battery["DesignCapacity"] where binfo is a GUI Label.

Here is the full code:

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.
        }
    }


}

However if I change binfo.stringValue = x.battery["DesignCapacity"] to binfo.stringValue = x.battery["DesignCapacity"] as String I get a "Swift dynamic cast failure" Error with a log of

libswiftCore.dylib`swift_dynamicCast:
0x1001b52f0:  pushq  %rbp
0x1001b52f1:  movq   %rsp, %rbp
0x1001b52f4:  pushq  %r15
0x1001b52f6:  pushq  %r14
0x1001b52f8:  pushq  %r13
0x1001b52fa:  pushq  %r12
0x1001b52fc:  pushq  %rbx
0x1001b52fd:  subq   $0x58, %rsp
0x1001b5301:  movq   %rcx, %r13
0x1001b5304:  movq   %rdx, %rbx
0x1001b5307:  movq   %rsi, %rdx
0x1001b530a:  movq   %rdi, %r12
0x1001b530d:  movl   $0x80000000, %r14d
0x1001b5313:  movq   (%r13), %rcx
0x1001b5317:  xorl   %eax, %eax
0x1001b5319:  cmpq   $0x41, %rcx
0x1001b531d:  cmovbeq %rcx, %rax
0x1001b5321:  cmpq   $0x3f, %rax
0x1001b5325:  jg     0x1001b5388               ; swift_dynamicCast + 152
0x1001b5327:  cmpq   $0x11, %rax
0x1001b532b:  ja     0x1001b55b0               ; swift_dynamicCast + 704
0x1001b5331:  leaq   0x504(%rip), %rcx         ; swift_dynamicCast + 1356
0x1001b5338:  movslq (%rcx,%rax,4), %rax
0x1001b533c:  addq   %rcx, %rax
0x1001b533f:  jmpq   *%rax
0x1001b5341:  movq   (%rbx), %rcx
0x1001b5344:  xorl   %eax, %eax
0x1001b5346:  cmpq   $0x41, %rcx
0x1001b534a:  cmovbeq %rcx, %rax
0x1001b534e:  cmpq   $0x3f, %rax
0x1001b5352:  jg     0x1001b5542               ; swift_dynamicCast + 594
0x1001b5358:  cmpq   $0x11, %rax
0x1001b535c:  ja     0x1001b55b0               ; swift_dynamicCast + 704
0x1001b5362:  leaq   0x51b(%rip), %rcx         ; swift_dynamicCast + 1428
0x1001b5369:  movslq (%rcx,%rax,4), %rax
0x1001b536d:  addq   %rcx, %rax
0x1001b5370:  jmpq   *%rax
0x1001b5372:  movq   (%rdx), %rsi
0x1001b5375:  movq   %r12, %rdi
0x1001b5378:  movq   %r13, %rdx
0x1001b537b:  movq   %r8, %rcx
0x1001b537e:  callq  0x1001b58d0               ; _dynamicCastUnknownClass(swift::OpaqueValue*, void*, swift::Metadata const*, swift::DynamicCastFlags)
0x1001b5383:  jmp    0x1001b55a8               ; swift_dynamicCast + 696
0x1001b5388:  addq   $-0x40, %rax
0x1001b538c:  cmpq   $0x2, %rax
0x1001b5390:  jae    0x1001b55b0               ; swift_dynamicCast + 704
0x1001b5396:  cmpq   %r13, %rbx
0x1001b5399:  je     0x1001b53fa               ; swift_dynamicCast + 266
0x1001b539b:  cmpq   $0xc, (%rbx)
0x1001b539f:  jne    0x1001b5418               ; swift_dynamicCast + 296
0x1001b53a1:  testq  %rbx, %rbx
0x1001b53a4:  je     0x1001b5418               ; swift_dynamicCast + 296
0x1001b53a6:  movq   %r12, %r15
0x1001b53a9:  movq   %r8, %r12
0x1001b53ac:  testq  0x8(%rbx), %r14
0x1001b53b0:  je     0x1001b543f               ; swift_dynamicCast + 335
0x1001b53b6:  movq   0x18(%rdx), %rbx
0x1001b53ba:  movq   -0x8(%rbx), %rax
0x1001b53be:  movq   %rdx, %rdi
0x1001b53c1:  movq   %rbx, %rsi
0x1001b53c4:  movq   %rdx, -0x58(%rbp)
0x1001b53c8:  callq  *0x10(%rax)
0x1001b53cb:  movq   %rax, %r14
0x1001b53ce:  movq   %r15, %rdi
0x1001b53d1:  movq   %r14, %rsi
0x1001b53d4:  movq   %rbx, %rdx
0x1001b53d7:  movq   %r13, %rcx
0x1001b53da:  movq   %r12, %rbx
0x1001b53dd:  movq   %rbx, %r8
0x1001b53e0:  callq  0x1001b52f0               ; swift_dynamicCast
0x1001b53e5:  movq   -0x58(%rbp), %rdi
0x1001b53e9:  movb   %al, %r12b
0x1001b53ec:  cmpq   %rdi, %r14
0x1001b53ef:  jne    0x1001b56b9               ; swift_dynamicCast + 969
0x1001b53f5:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b53fa:  testb  $0x2, %r8b
0x1001b53fe:  movq   -0x8(%r13), %rax
0x1001b5402:  movq   %r12, %rdi
0x1001b5405:  movq   %rdx, %rsi
0x1001b5408:  movq   %r13, %rdx
0x1001b540b:  je     0x1001b5434               ; swift_dynamicCast + 324
0x1001b540d:  callq  *0x48(%rax)
0x1001b5410:  movb   $0x1, %r12b
0x1001b5413:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b5418:  testb  $0x1, %r8b
0x1001b541c:  jne    0x1001b57ee               ; swift_dynamicCast + 1278
0x1001b5422:  testb  $0x4, %r8b
0x1001b5426:  jne    0x1001b555c               ; swift_dynamicCast + 620
0x1001b542c:  xorl   %r12d, %r12d
0x1001b542f:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b5434:  callq  *0x30(%rax)
0x1001b5437:  movb   $0x1, %r12b
0x1001b543a:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b543f:  movq   (%rdx), %rdi
0x1001b5442:  movq   %rdx, %rbx
0x1001b5445:  callq  0x1001deab0               ; swift_getObjectType
0x1001b544a:  movq   %r15, %rdi
0x1001b544d:  movq   %rbx, %rsi
0x1001b5450:  movq   %rax, %rdx
0x1001b5453:  movq   %r13, %rcx
0x1001b5456:  movq   %r12, %r8
0x1001b5459:  callq  0x1001b52f0               ; swift_dynamicCast
0x1001b545e:  jmp    0x1001b55a8               ; swift_dynamicCast + 696
0x1001b5463:  movq   (%rbx), %rcx
0x1001b5466:  xorl   %eax, %eax
0x1001b5468:  cmpq   $0x41, %rcx
0x1001b546c:  cmovbeq %rcx, %rax
0x1001b5470:  cmpq   $0x10, %rax
0x1001b5474:  ja     0x1001b5396               ; swift_dynamicCast + 166
0x1001b547a:  movl   $0x14001, %ecx
0x1001b547f:  btq    %rax, %rcx
0x1001b5483:  jae    0x1001b5396               ; swift_dynamicCast + 166
0x1001b5489:  leaq   0x44760(%rip), %rsi       ; _TMpSs21_ObjectiveCBridgeable
0x1001b5490:  movq   %r13, %rdi
0x1001b5493:  movq   %r12, -0x58(%rbp)
0x1001b5497:  movq   %r8, %r12
0x1001b549a:  movq   %rdx, %r15
0x1001b549d:  callq  0x1001b6b60               ; swift_conformsToProtocol
0x1001b54a2:  movq   %r15, %rdx
0x1001b54a5:  movq   %r12, %r8
0x1001b54a8:  movq   -0x58(%rbp), %r12
0x1001b54ac:  testq  %rax, %rax
0x1001b54af:  je     0x1001b5396               ; swift_dynamicCast + 166
0x1001b54b5:  movq   %rdx, %r15
0x1001b54b8:  movq   %r8, -0x60(%rbp)
0x1001b54bc:  movq   %r13, %rdi
0x1001b54bf:  movq   %r13, %rsi
0x1001b54c2:  movq   %rax, %r14
0x1001b54c5:  callq  *0x8(%r14)
0x1001b54c9:  testb  %al, %al
0x1001b54cb:  je     0x1001b55c7               ; swift_dynamicCast + 727
0x1001b54d1:  movq   %r13, %rdi
0x1001b54d4:  movq   %r13, %rsi
0x1001b54d7:  callq  *0x10(%r14)
0x1001b54db:  movq   %r14, -0x68(%rbp)
0x1001b54df:  movq   (%r15), %rsi
0x1001b54e2:  movq   $0x0, -0x30(%rbp)
0x1001b54ea:  leaq   -0x30(%rbp), %rdi
0x1001b54ee:  movq   %rax, %rdx
0x1001b54f1:  movq   -0x60(%rbp), %rbx
0x1001b54f5:  movq   %rbx, %rcx
0x1001b54f8:  callq  0x1001b58d0               ; _dynamicCastUnknownClass(swift::OpaqueValue*, void*, swift::Metadata const*, swift::DynamicCastFlags)
0x1001b54fd:  testb  %al, %al
0x1001b54ff:  je     0x1001b566b               ; swift_dynamicCast + 891
0x1001b5505:  movq   %rbx, %rax
0x1001b5508:  movq   %rbx, %r14
0x1001b550b:  andq   $0x6, %rax
0x1001b550f:  cmpq   $0x6, %rax
0x1001b5513:  movb   $0x1, %al
0x1001b5515:  je     0x1001b5522               ; swift_dynamicCast + 562
0x1001b5517:  movq   -0x30(%rbp), %rdi
0x1001b551b:  callq  0x1001ddcd0               ; swift_unknownRetain
0x1001b5520:  xorl   %eax, %eax
0x1001b5522:  movl   %eax, -0x6c(%rbp)
0x1001b5525:  movq   -0x8(%r13), %rcx
0x1001b5529:  xorl   %eax, %eax
0x1001b552b:  cmpq   $0x19, 0x98(%rcx)
0x1001b5533:  jae    0x1001b5726               ; swift_dynamicCast + 1078
0x1001b5539:  leaq   -0x50(%rbp), %r15
0x1001b553d:  jmp    0x1001b5735               ; swift_dynamicCast + 1093
0x1001b5542:  addq   $-0x40, %rax
0x1001b5546:  cmpq   $0x2, %rax
0x1001b554a:  jae    0x1001b55b0               ; swift_dynamicCast + 704
0x1001b554c:  testb  $0x1, %r8b
0x1001b5550:  jne    0x1001b57fd               ; swift_dynamicCast + 1293
0x1001b5556:  testb  $0x4, %r8b
0x1001b555a:  je     0x1001b55bf               ; swift_dynamicCast + 719
0x1001b555c:  movq   -0x8(%rbx), %rax
0x1001b5560:  movq   %rdx, %rdi
0x1001b5563:  movq   %rbx, %rsi
0x1001b5566:  callq  *0x20(%rax)
0x1001b5569:  xorl   %r12d, %r12d
0x1001b556c:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b5571:  movq   %r12, %rdi
0x1001b5574:  movq   %rdx, %rsi
0x1001b5577:  movq   %rbx, %rdx
0x1001b557a:  movq   %r13, %rcx
0x1001b557d:  callq  0x1001b5b20               ; _dynamicCastToExistential(swift::OpaqueValue*, swift::OpaqueValue*, swift::Metadata const*, swift::ExistentialTypeMetadata const*, swift::DynamicCastFlags)
0x1001b5582:  jmp    0x1001b55a8               ; swift_dynamicCast + 696
0x1001b5584:  movq   %r12, %rdi
0x1001b5587:  movq   %rdx, %rsi
0x1001b558a:  movq   %rbx, %rdx
0x1001b558d:  movq   %r13, %rcx
0x1001b5590:  callq  0x1001b5ec0               ; _dynamicCastToMetatype(swift::OpaqueValue*, swift::OpaqueValue*, swift::Metadata const*, swift::MetatypeMetadata const*, swift::DynamicCastFlags)
0x1001b5595:  jmp    0x1001b55a8               ; swift_dynamicCast + 696
0x1001b5597:  movq   %r12, %rdi
0x1001b559a:  movq   %rdx, %rsi
0x1001b559d:  movq   %rbx, %rdx
0x1001b55a0:  movq   %r13, %rcx
0x1001b55a3:  callq  0x1001b6600               ; _dynamicCastToExistentialMetatype(swift::OpaqueValue*, swift::OpaqueValue*, swift::Metadata const*, swift::ExistentialMetatypeMetadata const*, swift::DynamicCastFlags)
0x1001b55a8:  movb   %al, %r12b
0x1001b55ab:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b55b0:  leaq   0x363ad(%rip), %rax       ; "Corrupt Swift type object"
0x1001b55b7:  movq   %rax, 0x5ae9a(%rip)       ; gCRAnnotations + 8
0x1001b55be:  int3   
0x1001b55bf:  xorl   %r12d, %r12d
0x1001b55c2:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b55c7:  movq   -0x60(%rbp), %r14
0x1001b55cb:  testb  $0x1, %r14b
0x1001b55cf:  jne    0x1001b580c               ; swift_dynamicCast + 1308
0x1001b55d5:  testb  $0x4, %r14b
0x1001b55d9:  movq   %r15, %rdi
0x1001b55dc:  jne    0x1001b571d               ; swift_dynamicCast + 1069
0x1001b55e2:  xorl   %r12d, %r12d
0x1001b55e5:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b55ea:  movq   %rdx, -0x58(%rbp)
0x1001b55ee:  movq   %r8, %r14
0x1001b55f1:  leaq   0x445f8(%rip), %rsi       ; _TMpSs21_ObjectiveCBridgeable
0x1001b55f8:  movq   %rbx, %rdi
0x1001b55fb:  callq  0x1001b6b60               ; swift_conformsToProtocol
0x1001b5600:  testq  %rax, %rax
0x1001b5603:  je     0x1001b56ec               ; swift_dynamicCast + 1020
0x1001b5609:  movq   %rbx, %rdi
0x1001b560c:  movq   %rbx, %rsi
0x1001b560f:  movq   %rax, %r15
0x1001b5612:  callq  *0x8(%r15)
0x1001b5616:  movq   %r15, %rcx
0x1001b5619:  testb  %al, %al
0x1001b561b:  je     0x1001b5705               ; swift_dynamicCast + 1045
0x1001b5621:  movq   -0x58(%rbp), %r15
0x1001b5625:  movq   %r15, %rdi
0x1001b5628:  movq   %rbx, %rsi
0x1001b562b:  callq  *0x18(%rcx)
0x1001b562e:  movq   %r14, %rcx
0x1001b5631:  orq    $0x6, %rcx
0x1001b5635:  movq   %r12, %rdi
0x1001b5638:  movq   %rax, %rsi
0x1001b563b:  movq   %r13, %rdx
0x1001b563e:  callq  0x1001b58d0               ; _dynamicCastUnknownClass(swift::OpaqueValue*, void*, swift::Metadata const*, swift::DynamicCastFlags)
0x1001b5643:  movb   %al, %r12b
0x1001b5646:  testb  %r12b, %r12b
0x1001b5649:  sete   %al
0x1001b564c:  movzbl %al, %eax
0x1001b564f:  imulq  $0x2, %rax, %rax
0x1001b5653:  addq   $0x2, %rax
0x1001b5657:  testq  %r14, %rax
0x1001b565a:  je     0x1001b56da               ; swift_dynamicCast + 1002
0x1001b565c:  movq   -0x8(%rbx), %rax
0x1001b5660:  movq   %r15, %rdi
0x1001b5663:  movq   %rbx, %rsi
0x1001b5666:  callq  *0x20(%rax)
0x1001b5669:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b566b:  xorl   %r12d, %r12d
0x1001b566e:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b5670:  movq   %r12, %r15
0x1001b5673:  movq   %r8, %r12
0x1001b5676:  testq  0x8(%rbx), %r14
0x1001b567a:  je     0x1001b579a               ; swift_dynamicCast + 1194
0x1001b5680:  movq   0x18(%rdx), %rbx
0x1001b5684:  movq   -0x8(%rbx), %rax
0x1001b5688:  movq   %rdx, %rdi
0x1001b568b:  movq   %rbx, %rsi
0x1001b568e:  movq   %rdx, %r14
0x1001b5691:  callq  *0x10(%rax)
0x1001b5694:  movq   %r15, %rdi
0x1001b5697:  movq   %rax, %rsi
0x1001b569a:  movq   %rax, %r15
0x1001b569d:  movq   %rbx, %rdx
0x1001b56a0:  movq   %r13, %rcx
0x1001b56a3:  movq   %r12, %rbx
0x1001b56a6:  movq   %rbx, %r8
0x1001b56a9:  callq  0x1001b52f0               ; swift_dynamicCast
0x1001b56ae:  movq   %r14, %rdi
0x1001b56b1:  movb   %al, %r12b
0x1001b56b4:  cmpq   %rdi, %r15
0x1001b56b7:  je     0x1001b56da               ; swift_dynamicCast + 1002
0x1001b56b9:  testb  %r12b, %r12b
0x1001b56bc:  sete   %al
0x1001b56bf:  movzbl %al, %eax
0x1001b56c2:  imulq  $0x2, %rax, %rax
0x1001b56c6:  addq   $0x2, %rax
0x1001b56ca:  testq  %rbx, %rax
0x1001b56cd:  je     0x1001b56da               ; swift_dynamicCast + 1002
0x1001b56cf:  movq   0x18(%rdi), %rsi
0x1001b56d3:  movq   -0x8(%rsi), %rax
0x1001b56d7:  callq  *0x18(%rax)
0x1001b56da:  movb   %r12b, %al
0x1001b56dd:  addq   $0x58, %rsp
0x1001b56e1:  popq   %rbx
0x1001b56e2:  popq   %r12
0x1001b56e4:  popq   %r13
0x1001b56e6:  popq   %r14
0x1001b56e8:  popq   %r15
0x1001b56ea:  popq   %rbp
0x1001b56eb:  retq   
0x1001b56ec:  testb  $0x1, %r14b
0x1001b56f0:  movq   -0x58(%rbp), %rdi
0x1001b56f4:  jne    0x1001b581b               ; swift_dynamicCast + 1323
0x1001b56fa:  testb  $0x4, %r14b
0x1001b56fe:  jne    0x1001b571d               ; swift_dynamicCast + 1069
0x1001b5700:  xorl   %r12d, %r12d
0x1001b5703:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b5705:  testb  $0x1, %r14b
0x1001b5709:  jne    0x1001b582a               ; swift_dynamicCast + 1338
0x1001b570f:  testb  $0x4, %r14b
0x1001b5713:  movq   -0x58(%rbp), %rdi
0x1001b5717:  je     0x1001b57b0               ; swift_dynamicCast + 1216
0x1001b571d:  movq   -0x8(%rbx), %rax
0x1001b5721:  jmp    0x1001b5563               ; swift_dynamicCast + 627
0x1001b5726:  movq   0x88(%rcx), %rdi
0x1001b572d:  callq  0x1001e177c               ; symbol stub for: malloc
0x1001b5732:  movq   %rax, %r15
0x1001b5735:  movq   %rax, -0x78(%rbp)
0x1001b5739:  xorl   %edx, %edx
0x1001b573b:  movl   $0x1, %ecx
0x1001b5740:  movq   %r15, %rdi
0x1001b5743:  movq   %r13, %rsi
0x1001b5746:  callq  0x1001df760               ; swift_storeEnumTagSinglePayload
0x1001b574b:  testb  $0x1, %r14b
0x1001b574f:  je     0x1001b576a               ; swift_dynamicCast + 1146
0x1001b5751:  movq   -0x30(%rbp), %rbx
0x1001b5755:  movq   %rbx, %rdi
0x1001b5758:  movq   %r15, %rsi
0x1001b575b:  movq   %r13, %rdx
0x1001b575e:  movq   %r13, %rcx
0x1001b5761:  movq   -0x68(%rbp), %rax
0x1001b5765:  callq  *0x20(%rax)
0x1001b5768:  jmp    0x1001b5785               ; swift_dynamicCast + 1173
0x1001b576a:  movq   -0x30(%rbp), %rbx
0x1001b576e:  movq   %rbx, %rdi
0x1001b5771:  movq   %r15, %rsi
0x1001b5774:  movq   %r13, %rdx
0x1001b5777:  movq   %r13, %rcx
0x1001b577a:  movq   -0x68(%rbp), %rax
0x1001b577e:  callq  *0x28(%rax)
0x1001b5781:  testb  %al, %al
0x1001b5783:  je     0x1001b57b8               ; swift_dynamicCast + 1224
0x1001b5785:  movq   -0x8(%r13), %rax
0x1001b5789:  movq   %r12, %rdi
0x1001b578c:  movq   %r15, %rsi
0x1001b578f:  movq   %r13, %rdx
0x1001b5792:  callq  *0x48(%rax)
0x1001b5795:  movb   $0x1, %r12b
0x1001b5798:  jmp    0x1001b57bb               ; swift_dynamicCast + 1227
0x1001b579a:  movq   (%rdx), %rsi
0x1001b579d:  movq   %r15, %rdi
0x1001b57a0:  movq   %r13, %rdx
0x1001b57a3:  movq   %r12, %rcx
0x1001b57a6:  callq  0x1001b58d0               ; _dynamicCastUnknownClass(swift::OpaqueValue*, void*, swift::Metadata const*, swift::DynamicCastFlags)
0x1001b57ab:  jmp    0x1001b55a8               ; swift_dynamicCast + 696
0x1001b57b0:  xorl   %r12d, %r12d
0x1001b57b3:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b57b8:  xorl   %r12d, %r12d
0x1001b57bb:  movl   -0x6c(%rbp), %eax
0x1001b57be:  testb  %al, %al
0x1001b57c0:  jne    0x1001b57e0               ; swift_dynamicCast + 1264
0x1001b57c2:  testb  %r12b, %r12b
0x1001b57c5:  sete   %al
0x1001b57c8:  movzbl %al, %eax
0x1001b57cb:  imulq  $0x2, %rax, %rax
0x1001b57cf:  addq   $0x2, %rax
0x1001b57d3:  testq  %r14, %rax
0x1001b57d6:  je     0x1001b57e0               ; swift_dynamicCast + 1264
0x1001b57d8:  movq   %rbx, %rdi
0x1001b57db:  callq  0x1001ddd20               ; swift_unknownRelease
0x1001b57e0:  movq   -0x78(%rbp), %rdi
0x1001b57e4:  callq  0x1001e1752               ; symbol stub for: free
0x1001b57e9:  jmp    0x1001b56da               ; swift_dynamicCast + 1002
0x1001b57ee:  leaq   0x36189(%rip), %rax       ; "Swift dynamic cast failure"
0x1001b57f5:  movq   %rax, 0x5ac5c(%rip)       ; gCRAnnotations + 8
0x1001b57fc:  int3   
0x1001b57fd:  leaq   0x3617a(%rip), %rax       ; "Swift dynamic cast failure"
0x1001b5804:  movq   %rax, 0x5ac4d(%rip)       ; gCRAnnotations + 8
0x1001b580b:  int3   
0x1001b580c:  leaq   0x3616b(%rip), %rax       ; "Swift dynamic cast failure"
0x1001b5813:  movq   %rax, 0x5ac3e(%rip)       ; gCRAnnotations + 8
0x1001b581a:  int3   
0x1001b581b:  leaq   0x3615c(%rip), %rax       ; "Swift dynamic cast failure"
0x1001b5822:  movq   %rax, 0x5ac2f(%rip)       ; gCRAnnotations + 8
0x1001b5829:  int3   
0x1001b582a:  leaq   0x3614d(%rip), %rax       ; "Swift dynamic cast failure"
0x1001b5831:  movq   %rax, 0x5ac20(%rip)       ; gCRAnnotations + 8
0x1001b5838:  int3   
0x1001b5839:  nopl   (%rax)
0x1001b583c:  addl   $0x27fffffb, %eax
0x1001b5841:  cld

If anyone can help that would be greatly appreciated!


Solution

  • Your code should run with a couple of changes;

    When adding the int value to the dictionary, you're adding an optional Int. Instead use the ! operator to add the actual Int;

    if x[1].toInt() != nil{
        return [x[0],x[1].toInt()!]
    }  else if x[1] == "Yes"{
    

    Then (as you know it's an Int in the dictionary) you can just convert it to a string using the String constructor;

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