【问题标题】:Concrete type error in code from Swift 3.0.1 while adding constraints to protocol extensionsSwift 3.0.1 代码中的具体类型错误,同时向协议扩展添加约束
【发布时间】:2017-04-10 10:43:20
【问题描述】:

来自 Swift 编程语言指南:

extension Collection where Iterator.Element:TextRepresentable
{
   var textualDescription:String {
      let itemsAsText = self.map { $0.textualDescription }
      return "[" + itemsAsText.joined(separator: ", ") + "]"
   }
}

...

let hamsters = [murrayTheHamster, morganTheHamster, mauriceTheHamster]

print(hamsters.textualDescription)

此时编译器告诉我:

不支持将“TextRepresentable”用作符合协议“TextRepresentable”的具体类型。

我有点惊讶,因为代码就在语言指南之外。这是语言指南中的错误,还是我输入错误?还是我的编译器设置错误?

【问题讨论】:

  • 再次查看指南 - murrayTheHamstermorganTheHamstermauriceTheHamster 输入为 Hamster,而不是 TextRepresentable。协议不符合自己,因此您不能将TextRepresentable 用作符合TextRepresentable 的类型。

标签: swift swift3


【解决方案1】:

Xcode 版本 8.2 beta (8C23) 对我来说很好用:

import UIKit

protocol TextRepresentable {
    var textualDescription: String { get }
}

extension Collection where Iterator.Element:TextRepresentable
{
    var textualDescription:String {
        let itemsAsText = self.map { $0.textualDescription }
        return "[" + itemsAsText.joined(separator: ", ") + "]"
    }
}

struct Hamster {
    var name: String
    var textualDescription: String {
        return "A hamster named \(name)"
    }
}
extension Hamster: TextRepresentable {}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let murrayTheHamster = Hamster(name: "Murray")
        let morganTheHamster = Hamster(name: "Morgan")
        let mauriceTheHamster = Hamster(name: "Maurice")
        let hamsters = [murrayTheHamster, morganTheHamster, mauriceTheHamster]

        print(hamsters.textualDescription)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多