无法转换类型'Swift.Unmanaged< __ ObjC.NSString>'的值'Swift.AnyHashable'(0x11075f040)

时间:2017-11-03 09:06:08

标签: ios swift xcode

以下是我的代码,错误显示在withOptions:block

 KNSemiModalOptionKeys.pushParentBack     : NSNumber(value: false),
  KNSemiModalOptionKeys.animationDuration   : NSNumber(value: 1.0),                         
   KNSemiModalOptionKeys.shadowOpacity      : NSNumber(value: 0.3)

我正在尝试在我的项目中实现THCalendarDatePicker日历。

  @IBAction func dateButtonTouched(sender: AnyObject) {
    datePicker.date = curDate as Date!
    datePicker.setDateHasItemsCallback({(date: Date!) -> Bool in
        let tmp = (arc4random() % 30) + 1
        return tmp % 5 == 0
    })
    presentSemiViewController(datePicker, withOptions: [
        KNSemiModalOptionKeys.pushParentBack     : NSNumber(value: false),
        KNSemiModalOptionKeys.animationDuration   : NSNumber(value: 1.0),
        KNSemiModalOptionKeys.shadowOpacity      : NSNumber(value: 0.3)
        ])
}

1 个答案:

答案 0 :(得分:0)

我解决了这个错误,下面是我的代码:

@IBAction func dateButtonTouched(sender: AnyObject) {
    datePicker.date = curDate as Date!
    datePicker.setDateHasItemsCallback({(date: Date!) -> Bool in
        let tmp = (arc4random() % 30) + 1
        return tmp % 5 == 0
    })
    presentSemiViewController(datePicker, withOptions: [
        convertCfTypeToString(cfValue: KNSemiModalOptionKeys.shadowOpacity) as String! : 0.3 as Float,
        convertCfTypeToString(cfValue: KNSemiModalOptionKeys.animationDuration) as String! : 1.0 as Float,
        convertCfTypeToString(cfValue: KNSemiModalOptionKeys.pushParentBack) as String! : false as Bool
        ])
}

/* https://vandadnp.wordpress.com/2014/07/07/swift-convert-unmanaged-to-string/ */
func convertCfTypeToString(cfValue: Unmanaged<NSString>!) -> String?{
    /* Coded by Vandad Nahavandipoor */
    let value = Unmanaged<CFString>.fromOpaque(
        cfValue.toOpaque()).takeUnretainedValue() as CFString
    if CFGetTypeID(value) == CFStringGetTypeID(){
        return value as String
    } else {
        return nil
    }
}