-1

我正在使用最新版本的 MessageKit 进行练习,并且在编译过程中出现“'SenderType' 无法构造,因为它没有可访问的初始化程序”的错误,

为什么会发生,请同时推荐解决方案

谢谢你

    import Foundation
    import UIKit
    import MessageKit

    struct Member {
        let name: String
        let color: UIColor
    }

    struct Message {
        let member: Member
        let text: String
        let messageId: String
    }

    extension Message: MessageType {
**//ERROR IS SHOWN HERE**
        var sender: SenderType {
            return SenderType(id: member.name, displayName: member.name)

        }

      /*  var sender: Sender {
            return Sender(id: member.name, displayName: member.name)
        }*/

        var sentDate: Date {
            return Date()
        }

        var kind: MessageKind {
            return .text(text)
        }
    }
4

2 回答 2

0

SenderType是一个PROTOCOLCMD+Control^+Click当你在那的时候你会看到的SenderType。那么你会怎么做呢?Xcode 说它没有构造函数,实际上它没有构造函数 ( init()),正如您在其描述中看到的那样。

MessageType是一个PROTOCOL太。你所做的是实现它的函数/变量。所以对SenderType. 实现其功能/变量:

  1. 发件人ID
  2. 显示名称

最后,你会这样:

extension Message: MessageType, SenderType {
    var senderId: String {
        return member.name
    }

    var displayName: String {
        return member.name
    }

    var sentDate: Date {
        return Date()
    }

    var kind: MessageKind {
        return .text(text)
    }
}
于 2019-09-08T02:11:08.220 回答
0

Well Protocol 只是一个蓝图,而不是完全成熟的类型(有时称为存在类型)。

但是,无论谁采用 & 符合它实际上都是一个具体类型,并且 Class/Struct/Enum 可以/应该被实例化。

参考:https ://docs.swift.org/swift-book/LanguageGuide/Protocols.html

于 2019-09-08T02:40:14.980 回答