【问题标题】:In swift,"Type of expression is ambiguous without more context"?很快,“没有更多上下文的表达类型是模棱两可的”?
【发布时间】:2016-05-09 02:33:58
【问题描述】:
let fontRef = CTFontCreateWithName("ArialMT", config.fontSize, nil);
[kCTFontAttributeName : fontRef];

[kCTFontAttributeName : fontRef] 给我以下错误:

“没有更多上下文,表达式的类型是模棱两可的”

【问题讨论】:

  • 那行代码到底应该做什么?
  • @SausageMachine 我想用字典来初始化NSAttributedString

标签: ios


【解决方案1】:

您没有定义字典的类型。根据您的定义,不清楚什么是字典类型,这是歧义的原因。您需要将其分配给某些东西以确保没有类型歧义。这也不是根错误,因为kCTFontAttributeNameCFString 类型而不是Hashable,因为结果不能是字典的键,您需要先将其转换为as StringNSAttributedString 的字典类型应该是 [String: AnyObject] 所以正确的答案是 let attributes: [String: AnyObject] = [kCTFontAttributeName as String : fontRef]

ps 也不要将; 放在行尾,Swift 不再需要它,而且通常被认为是不好的风格。

【讨论】:

  • 它不能写成[String: AnyObject],因为CFString 不能隐式转换为String,但你有正确的基本概念。它也不能是[CFString: AnyObject],因为CFString 不是Hashable。他大概想说let attributes: [String: AnyObject] = [kCTFontAttributeName as String: fontRef]
  • @robmayoff 你是对的,歧义不是错误的主要原因,而只是一个误导性的编译器警告。
  • @NikitaLeonov 年,我知道swift不需要“;”,因为我在手机中编辑它,我只是用它来分隔代码。我想用字典来初始化NSAttributedString,那么字典怎么编码呢?谢谢。
  • @Hai.Z 我用NSAttributedString相关信息更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
  • 2016-12-10
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多