小编ami*_*mir的帖子

Codable 类中的 Codable 变量

鉴于这个类:

class MyClass: Codable {
    var variable : Codable? = nil
}
Run Code Online (Sandbox Code Playgroud)

我得到错误:

类型“MyClass”不符合协议“Decodable”

类型“MyClass”不符合协议“Encodable”

如何将符合 Codable 的通用变量作为 Codable 类中的属性?

swift codable

5
推荐指数
1
解决办法
1135
查看次数

使用属性定义单例的协议

我有以下协议定义具有属性的单例:

protocol SingletonProtocol {
    static var shared: SingletonProtocol { get }
    var variable : Int { get set }
}
Run Code Online (Sandbox Code Playgroud)

以及实现此协议的以下类:

class Singleton : SingletonProtocol{
    static let shared : SingletonProtocol = Singleton()
    var variable = 4
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话:

Singleton.shared.variable = 5
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 change 'let' to 'var' to make it mutable
Run Code Online (Sandbox Code Playgroud)

如果我在没有协议的情况下实现此类,则不会收到错误并且可以更改变量。我可以通过添加setVariable:方法来解决这个问题,但我想直接访问和修改变量。

如何编写一个协议来定义带有可修改变量的单例?

singleton protocols swift

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

如何从可选的Int初始化可选的UInt?

我想将可选的Int转换为可选的UInt:

let optionalNumber : Int?
//later in code
let optionalPositiveNumber = UInt(optionalNumber)
Run Code Online (Sandbox Code Playgroud)

给出错误:

Cannot invoke initializer for type 'Uint' with an argument list of type (Int?)
Run Code Online (Sandbox Code Playgroud)

我可以通过为UInt创建以下扩展来解决这个问题:

extension UInt {
   init?(_ number : Int?) {
       if let number = number {
           self = UInt(number)
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法转换Int?UInt?不使用扩展或条件检查(如果,保护)?

type-conversion optional swift

2
推荐指数
1
解决办法
361
查看次数