【问题标题】:Cannot invoke initializer for type 'String' with an argument list of type '(CustomObject)'无法使用“(CustomObject)”类型的参数列表调用“String”类型的初始化程序
【发布时间】:2017-01-22 21:35:41
【问题描述】:

我正在尝试将自定义对象转换/转换为字符串,但不断收到错误消息:

无法使用参数列表为“String”类型调用初始化程序 输入“(艺术信息)”

我有一个自定义类:

class ArtInfo {

  var poster: String?
  var artwork: String?
  var fanart: String?

  init (poster: String?, artwork: String?, fanart: String?){
    self.poster = poster
    self.artwork = artwork
    self.fanart = fanart
  }
}

检索值(json 数据)后,我试图将它们放入本地数组中。数组按类别划分,json 检索和解析涵盖了所有数据,而不仅仅是这个特定的类。这是我将数据附加到本地数组的方法:

      var photosArray: [String] = []

  override func viewDidLoad() {
    super.viewDidLoad() 
        DetailShowInfo.updateAllDetails(urlExtension: url, completionHandler: { details in

      let artPics = ArtInfo.init(poster: details[0].poster, artwork: details[0].artwork, fanart: details[0].fanart)
          self.photosArray.append(String(artPics))// Error happens here
    })
}

【问题讨论】:

  • String(artPics) 应该做什么?
  • 它应该将自定义对象 'ArtInfo' 转换为字符串
  • "convert" 以什么方式?预期的结果是什么?
  • 把ArtInfo中的数据改成字符串格式
  • 程序应该如何知道如何组成该对象的字符串?它应该把三个内部变量放在一起还是倒置,在它们之间放一个逗号,打乱它们,相乘,排序? 必须告诉程序如何根据你的对象创建一个字符串。

标签: ios arrays swift string


【解决方案1】:

您需要使用函数String(describing:)

所以你会使用String(describing:artPics)

这将显示一个描述任何对象的字符串,但默认情况下返回的字符串不是很有用。

为了获得有用的字符串,您需要使您的自定义对象符合 CustomStringConvertible 协议,这意味着它具有Stringdescription 属性。您的班级可能如下所示:

class ArtInfo: CustomStringConvertible {

  var poster: String?
  var artwork: String?
  var fanart: String?

  init (poster: String?, artwork: String?, fanart: String?){
    self.poster = poster
    self.artwork = artwork
    self.fanart = fanart
  }
  var description: String {
    return "ArtInfo object. Poster = " + 
    poster + ", artwork = " + artwork +
    ", fanart = " + fanart
  }
}

(调整计算出的 description 属性后面的代码以获得您想要的格式。上面会产生您从可选项中获得的相当讨厌的“可选(“值”)”。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多