加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 无法转换类型’Meme!’的值到期望的参数类型’@noescap

发布时间:2020-12-14 06:00:50 所属栏目:百科 来源:网络整理
导读:这里是代码: @IBAction func deleteMeme(sender: UIBarButtonItem) { if let foundIndex = MemeRepository.sharedInstance.memes.indexOf(selectedMeme) { //remove the item at the found index MemeRepository.sharedInstance.memes.removeAtIndex(foundI
这里是代码:
@IBAction func deleteMeme(sender: UIBarButtonItem) {
       if let foundIndex = MemeRepository.sharedInstance.memes.indexOf(selectedMeme) {     
        //remove the item at the found index
        MemeRepository.sharedInstance.memes.removeAtIndex(foundIndex)
        navigationController?.popViewControllerAnimated(true)

错误发生在.indexOf方法(selectedMeme)。

无法转换类型Meme的值!到期望的参数类型@noescape(Meme)throws – > Bool

Meme!是我的应用程序的结构。我如何通过这个工作?

struct Meme {

var topText : String!
var bottomText: String!
var image: UIImage!
var memedImage: UIImage!

init(topText: String,bottomText: String,image: UIImage,memedImage: UIImage) {
    self.topText = topText
    self.bottomText = bottomText
    self.image = image
    self.memedImage = memedImage
错误消息具有误导性。你实际需要的是为编译器提供一种比较两个Meme实例并决定这些实例是相等的标准的方法。

假设您希望将具有相同name属性的两个实例视为相等。

我们使结构符合Equatable,我们还创建一个==运算符,通过它们的name属性比较两个结构体:

struct Meme:Equatable {
    var name:String!
}

func ==(lhs: Meme,rhs: Meme) -> Bool {
    return lhs.name == rhs.name
}

现在我们可以使用indexOf和Meme实例:

let doge = Meme(name: "doge")

let lolcat = Meme(name: "lolcat")

let memes = [lolcat,doge]

if let dogeIndex = memes.indexOf(doge) {
    print(dogeIndex)  // 1
}

如果你想比较两个实例不是通过它们的name属性,而是通过它们的唯一性,那么你必须使结构符合Hashable,并使用一个唯一的hashValue属性返回一个Int:

struct Meme:Hashable {
    var name:String!
    var hashValue: Int {
        return self.name.hashValue
    }
    init(name: String) {
        self.name = name
    }
}

func ==(lhs: Meme,rhs: Meme) -> Bool {
    return lhs.hashValue == rhs.hashValue
}

let doge = Meme(name: "doge")

let lolcat = Meme(name: "lolcat")

let memes = [lolcat,doge]

if let dogeIndex = memes.indexOf(doge) {
    print(dogeIndex)  // 1
}

在此示例中,hashValue由self.name构成,因此具有相同名称属性的Meme的两个不同实例将被视为相等。如果你不想要,使用另一个来源的哈希值。

注意:在Swift 3中,indexOf已经成为index的索引,因此对于这个例子,我们将memes.indexOf(doge)更改为memes.index(of:doge)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读