【发布时间】:2018-03-19 23:00:01
【问题描述】:
我知道有很多这样的问题。但是,这是我的代码 sn-p:
protocol AProt { var a:Int { get set } }
protocol BProt { var b:Int { get set } }
protocol CProt { var c:Int { get set } }
class A:AProt, CProt { var a = 1; var c = 3 }
class B:BProt, CProt { var b = 2; var c = 30 }
var a = A()
var b = B()
var c = a as CProt // works
c.c = 123
a = c as! A
print (a.c)
(a as CProt).c = 999 // throws error
print (a.c)
查看this answer 它告诉(...as...) 使表达式不可变。但是……
虽然(a as CProt).c = 999 失败并显示上述错误消息,但使用var c = a as CProt 的解决方法可以工作。我认为这是一个简单的编译器错误,但我想知道这里是否可以做一些事情(比如添加一个秘密关键字)。
【问题讨论】:
-
如果您可以简单地分配
a.c = 999,as CProt演员表的原因是什么? -
@MartinR 好吧,这是一个缩小的例子,整个上下文都会解决这个问题。或许我得重新思考,再次从后门进入整件事。