自更新到 Swift 1.2 以来,字典现在给出错误 'not convertible to BooleanLiteralConvertible'
Dictionary now gives error 'not convertible to BooleanLiteralConvertible' since updating to Swift 1.2
我刚刚开始思考 Swift - 然后是 Swift 1.2(破坏了我的工作代码)!
我有一个基于 NSHipster - CGImageSourceCreateThumbnailAtIndex 中的代码示例的函数。
我以前的工作代码是:
import ImageIO
func processImage(jpgImagePath: String, thumbSize: CGSize) {
if let path = NSBundle.mainBundle().pathForResource(jpgImagePath, ofType: "") {
if let imageURL = NSURL(fileURLWithPath: path) {
if let imageSource = CGImageSourceCreateWithURL(imageURL, nil) {
let maxSize = max(thumbSize.width, thumbSize.height) / 2.0
let options = [
kCGImageSourceThumbnailMaxPixelSize: maxSize,
kCGImageSourceCreateThumbnailFromImageIfAbsent: true
]
let scaledImage = UIImage(CGImage: CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options))
// do other stuff
}
}
}
}
从 Swift 1.2 开始,编译器提供了两个与 options
字典相关的错误:
- 表达式类型不明确,没有更多上下文
- '_' 不可转换为 'BooleanLiteralConvertible'(参考 'true' 值)
我尝试了多种方法来专门声明选项字典中的类型(例如 [String : Any]
、[CFString : Any]
、[Any : Any]
)。虽然这可能会解决一个错误,但它们会引入其他错误。
谁能帮我照亮一下??
更重要的是,任何人都可以解释一下 Swift 1.2 和字典的变化是什么阻止了它的工作。
来自 Xcode 6.3 发行说明:
The implicit conversions from bridged Objective-C classes
(NSString/NSArray/NSDictionary) to their corresponding Swift value
types (String/Array/Dictionary) have been removed, making the Swift
type system simpler and more predictable.
您遇到的问题是 CFString
,例如 kCGImageSourceThumbnailMaxPixelSize
。这些不是自动的
转换为 String
了。两种可能的解决方案:
let options = [
kCGImageSourceThumbnailMaxPixelSize as String : maxSize,
kCGImageSourceCreateThumbnailFromImageIfAbsent as String : true
]
或
let options : [NSString : AnyObject ] = [
kCGImageSourceThumbnailMaxPixelSize: maxSize,
kCGImageSourceCreateThumbnailFromImageIfAbsent: true
]
我刚刚开始思考 Swift - 然后是 Swift 1.2(破坏了我的工作代码)!
我有一个基于 NSHipster - CGImageSourceCreateThumbnailAtIndex 中的代码示例的函数。
我以前的工作代码是:
import ImageIO
func processImage(jpgImagePath: String, thumbSize: CGSize) {
if let path = NSBundle.mainBundle().pathForResource(jpgImagePath, ofType: "") {
if let imageURL = NSURL(fileURLWithPath: path) {
if let imageSource = CGImageSourceCreateWithURL(imageURL, nil) {
let maxSize = max(thumbSize.width, thumbSize.height) / 2.0
let options = [
kCGImageSourceThumbnailMaxPixelSize: maxSize,
kCGImageSourceCreateThumbnailFromImageIfAbsent: true
]
let scaledImage = UIImage(CGImage: CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options))
// do other stuff
}
}
}
}
从 Swift 1.2 开始,编译器提供了两个与 options
字典相关的错误:
- 表达式类型不明确,没有更多上下文
- '_' 不可转换为 'BooleanLiteralConvertible'(参考 'true' 值)
我尝试了多种方法来专门声明选项字典中的类型(例如 [String : Any]
、[CFString : Any]
、[Any : Any]
)。虽然这可能会解决一个错误,但它们会引入其他错误。
谁能帮我照亮一下?? 更重要的是,任何人都可以解释一下 Swift 1.2 和字典的变化是什么阻止了它的工作。
来自 Xcode 6.3 发行说明:
The implicit conversions from bridged Objective-C classes (NSString/NSArray/NSDictionary) to their corresponding Swift value types (String/Array/Dictionary) have been removed, making the Swift type system simpler and more predictable.
您遇到的问题是 CFString
,例如 kCGImageSourceThumbnailMaxPixelSize
。这些不是自动的
转换为 String
了。两种可能的解决方案:
let options = [
kCGImageSourceThumbnailMaxPixelSize as String : maxSize,
kCGImageSourceCreateThumbnailFromImageIfAbsent as String : true
]
或
let options : [NSString : AnyObject ] = [
kCGImageSourceThumbnailMaxPixelSize: maxSize,
kCGImageSourceCreateThumbnailFromImageIfAbsent: true
]