鉴于这个类:
class MyClass: Codable {
var variable : Codable? = nil
}
Run Code Online (Sandbox Code Playgroud)
我得到错误:
类型“MyClass”不符合协议“Decodable”
类型“MyClass”不符合协议“Encodable”
如何将符合 Codable 的通用变量作为 Codable 类中的属性?
我有以下协议定义具有属性的单例:
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:
方法来解决这个问题,但我想直接访问和修改变量。
如何编写一个协议来定义带有可修改变量的单例?
我想将可选的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?
不使用扩展或条件检查(如果,保护)?