相关疑难解决方法(0)

议定书不符合自己的要求?

为什么这个Swift代码没有编译?

protocol P { }
struct S: P { }

let arr:[P] = [ S() ]

extension Array where Element : P {
    func test<T>() -> [T] {
        return []
    }
}

let result : [S] = arr.test()
Run Code Online (Sandbox Code Playgroud)

编译器说:"类型P不符合协议P"(或者,在Swift的更高版本中,"不支持使用'P'作为符合协议'P'的具体类型.").

为什么不?不知怎的,这感觉就像语言中的漏洞.我意识到问题源于将数组声明arr协议类型的数组,但这是不合理的事情吗?我认为协议正是为了帮助提供类似层次结构的结构?

generics swift swift-protocols

117
推荐指数
3
解决办法
1万
查看次数

为什么不能使用协议`Encodable`作为func中的类型

我正在尝试通过符合Encodable协议的编码模型获取数据.但它无法encode像下面的代码那样调用func :

// MARK: - Demo2

class TestClass2: NSObject, Encodable {
    var x = 1
    var y = 2
}


var dataSource2: Encodable?

dataSource2 = TestClass2()

// error: `Cannot invoke 'encode' with an argument list of type '(Encodable)'`
let _ = try JSONEncoder().encode(dataSource2!)
//func encode<T>(_ value: T) throws -> Data where T : Encodable
Run Code Online (Sandbox Code Playgroud)

但在另一个演示中,它运作良好,为什么?

// MARK: - Demo1

protocol TestProtocol {
    func test()
}

class TestClass1: NSObject, TestProtocol {
    func test() {
        print("1")
    }

    var …
Run Code Online (Sandbox Code Playgroud)

protocols swift encodable

10
推荐指数
3
解决办法
3194
查看次数

如何用Codable类型定义变量?

我想用Codable类型创建变量.然后在JSONEncoder类中使用它.我认为下面的代码应该可以正常工作,但它给了我错误:

无法encode使用类型的参数列表调用(Codable).

如何声明JSONEncoder将无错的可编码变量?

struct Me: Codable {
    let id: Int
    let name: String
}

var codable: Codable? // It must be generic type, but not Me.

codable = Me(id: 1, name: "Kobra")

let data = try? JSONEncoder().encode(codable!)
Run Code Online (Sandbox Code Playgroud)

以下是如何使用函数传递Codable的类似问题.但我正在寻找如何使用变量(类变量)设置Codable.

json swift swift-protocols swift4

4
推荐指数
2
解决办法
4160
查看次数

标签 统计

swift ×3

swift-protocols ×2

encodable ×1

generics ×1

json ×1

protocols ×1

swift4 ×1