Swift &引用;类型字符串不符合协议StringLiteralConvertible“;

Swift &引用;类型字符串不符合协议StringLiteralConvertible“;,swift,Swift,我是一名长期的Obj-C开发人员,但和其他人一样,我对Swift是个新手,对此我感到很困惑。我正在尝试转换一个用Obj-C编写的旧教程 我有一个“动物”类声明如下: class Animal { let title: String let image: UIImage let creator: String init(title: String, image: UIImage, creator: String) { self.title =

我是一名长期的Obj-C开发人员,但和其他人一样,我对Swift是个新手,对此我感到很困惑。我正在尝试转换一个用Obj-C编写的旧教程

我有一个“动物”类声明如下:

class Animal
{
    let title: String
    let image: UIImage
    let creator: String

    init(title: String, image: UIImage, creator: String)
    {
       self.title = title
       self.image = image
       self.creator = creator
    }
}
在另一个类中,我需要一个动物实例数组,它被声明为该类的属性,如下所示:

let animals: [Animal]
并初始化(未成功),如下所示:

我在数组初始值设定项的第一行遇到了一个构建错误,它的内容与文章的标题一样:“类型字符串不符合协议StringLiteralConvertible”。我们不能将字符串文本分配给字符串对象吗?这似乎不可能。我违反了什么规则?如何解决

提前谢谢

使用
UIImage(命名:)
而不是
UIImage.imageNamed()
对我很有效:

let animals: [Animal] = [Animal(title: "Sleeping Cat", image: UIImage(named: "ID-101.jpg"), creator:"papaija2008")]

我希望它也能为您服务。

成功了,谢谢!我现在意识到UIImage.imageNamed()正在调用旧的Obj-C方法,它当然需要一个NSString参数,所以字符串似乎不能隐式转换为NSString?当然,简单地使用Swift API比转换更有意义。无论如何,谢谢!实际上,我在游乐场看到的错误是,
imageNamed不可用:使用对象构造UIImage(named:)
。顺便说一句,重要的是它解决了您的问题。@ReidBelton否,
String
NSString
是无缝桥接的,这意味着您可以在需要
String
的位置传递
NSString
,反之亦然。问题是Swift修改了旧式的Objective-C初始值设定项以使用其新的构造函数语法。因此,Objective-C中名为的thingyWithName成为Swift中调用的构造函数。您可以查看
UIImage
的文档,了解对于任何给定方法,Swift和Objective-C调用是如何不同的。我经常看到这个错误,它通常并不意味着与字符串相关的东西是错误的。通常,传递给函数的某些参数在某种程度上是不正确的。我已经解决了类似的问题,方法是使用一个
let
,为每个相关参数指定一个显式类型,然后传入这些变量。编译器通常会以这种方式提供更有用的错误消息。
let animals: [Animal] = [Animal(title: "Sleeping Cat", image: UIImage(named: "ID-101.jpg"), creator:"papaija2008")]