【问题标题】:String literal must be prefixed by '@'字符串文字必须以 '@' 为前缀
【发布时间】:2020-05-08 23:28:05
【问题描述】:

我来自 JS,所以我不确定字符串文字。

我的 swift 中有以下语法

[GMSServices provideAPIKey:@"ABCXYZ"];

如果我从上面删除@,swift会抛出以下错误String literal must be prefixed by '@'

谁能解释我为什么会收到这个错误以及什么是字符串文字?这个答案在上述情况下没有帮助:What does the @ prefix do on string literals in C#

【问题讨论】:

  • 那是 Objective-C,不是 Swift。
  • 好的。我不知道本地实现,但我不确定为什么每个人都反对它。

标签: objective-c swift


【解决方案1】:

首先,不要在互联网上发布 API 密钥。我已编辑您的问题以删除密钥,但它仍然在问题历史记录中可见。

无论如何,您引用的代码是 Objective-C 代码,而不是 Swift 代码。该代码声明了一个 NSString 文字。 NSString 是一个 Objective-C 类。与普通的 C 字符串相比,NSString 类提供了许多用于使用和操作字符串的 API,而 Objective-C 运行时管理 NSString 内存,因此您不必这样做。

在 Swift 中,等价的代码是

GMSServices.provideAPIKey("ABCXYZ")

在这里,我们使用的是 Swift String 文字,它类似于 NSString,具有许多 API 和自动内存管理,但我们不需要 @ 前缀,因为 Swift 不是C.

【讨论】:

  • 该密钥仅包含实际密钥的一小部分。我的意思是它对其他人不起作用,但感谢您删除它:)
  • 如果我在我的代码中用 GMSServices.provideAPIKey("ABCXYZ") 替换 [GMSServices provideAPIKey:@"ABCXYZ"];。它给出了错误Property 'provideAPIKey' not found on object of type 'GMSServices'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2017-07-29
  • 2016-04-28
  • 1970-01-01
  • 2019-11-29
  • 2013-08-27
相关资源
最近更新 更多