似乎protocol不支持===运营商,而class确实如此.
protocol P {
}
class A : P {
}
var a1 = A()
var a2 = A()
var p1:P = a1
var p2:P = a2
a1 === a2 // true
p1 === p2 // error: Type 'P' does not conform to protocol 'AnyObject'
Run Code Online (Sandbox Code Playgroud)
我认为这可能是因为符合协议的具体类型也可能是一个struct不支持===运算符的值类型(如).我只是想知道,如果我确定真正的类型是一个类,我怎么能比较它们的引用,比如p1和p2这里?
func myfunc<T>(i:T) -> T {
return i
}
Run Code Online (Sandbox Code Playgroud)
是否有可能使这个泛型函数成为一个闭包?
let myfunc = { <T>(i:T) -> T in
return i
}
Run Code Online (Sandbox Code Playgroud)
这不起作用......
例如:
var a = [1, 2, 3] // Ints
var s = ",".join(a) // EXC_BAD_ACCESS
Run Code Online (Sandbox Code Playgroud)
是否可以使连接函数返回"1,2,3"?
扩展Int(或其他自定义类型)以符合某些协议?
protocol P : class {
var value:Int {get}
}
class X : P {
var value = 0
init(_ value:Int) {
self.value = value
}
}
var ps:[P] = [X(1), X(2)]
for p in ps {
if let x = p as? X { // works for a single variable
...
}
}
if let xs = ps as? [X] { // doesn't work for an array (EXC_BAD_ACCESS)
...
}
Run Code Online (Sandbox Code Playgroud)
如果P是类而不是协议,则代码正常工作.类和协议之间有什么区别?它们都是作为堆中的指针实现的,不是吗?上面的代码可以成功编译,但在运行时崩溃.这个EXC_BAD_ACCESS错误是什么意思?
感谢@Antonio,但我仍然不明白这个示例代码是如何工作的.
let someObjects: [AnyObject] = [
Movie(name: "2001: A …Run Code Online (Sandbox Code Playgroud) 我在wAny hAny size class中设置了约束,并且它适用于iPhone和iPad模拟器.

然后我切换到wAny hCompact size class并进行了一些更改

它在iPhone横向模式下看起来很不错,但在iPad上没有任何改变,因为iPad是wRegular hRegular.我尝试将这些约束应用于wRegular hAny size class,但找不到快速的方法.再次手动修改所有约束是没有意义的.我发现如果我在Inspector面板中双击约束,则可以选择将约束安装到其他大小的类.但这仅适用于单一约束......

那么,是否可以将所有约束从一个大小类应用到另一个大小类?
A类提供字符串值.B类本身有两个A类成员,并提供计算属性"v"来选择其中一个.
class A {
var value: String
init(value: String) {
self.value = value
}
}
class B {
var v1: A?
var v2: A = A(value: "2")
private var v: A {
return v1 ?? v2
}
var value: String {
get {
return v.value
}
set {
v.value = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码很简单,很有效.由于A和B都有一个成员"值",我把它作为这样的协议:
protocol ValueProvider {
var value: String {get set}
}
class A: ValueProvider {
var value: String
init(value: String) {
self.value = value
}
}
class …Run Code Online (Sandbox Code Playgroud) 其实我有两个问题:
SendMessage从工作线程调用是否安全?CWnd方法,比如MessageBox,SendMessage在场景后调用API函数?根据我的理解,当工作线程调用时SendMessage,它会将消息推送到UI线程的消息队列中,并等待直到处理此消息.在这种情况下,这样做是安全的.
我对此并不十分肯定.如果我错了,请纠正我.
非常感谢.
------------------------ update ------------------------- ---------
作为结论:
::SendMessage和::PostMessage跨线程是安全的.CWnd跨线程调用方法是不安全的.有些方法可能是安全的,但不能保证.非常感谢大家.