小编Ken*_*ang的帖子

协议不支持"==="运算符?

似乎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不支持===运算符的值类型(如).我只是想知道,如果我确定真正的类型是一个类,我怎么能比较它们的引用,比如p1p2这里?

swift

25
推荐指数
1
解决办法
3936
查看次数

是否可以在Swift中创建一个通用的闭包?

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)

这不起作用......

generics closures ios swift

24
推荐指数
3
解决办法
8417
查看次数

Swift:String.join()如何工作自定义类型?

例如:

var a = [1, 2, 3]    // Ints
var s = ",".join(a)  // EXC_BAD_ACCESS
Run Code Online (Sandbox Code Playgroud)

是否可以使连接函数返回"1,2,3"?

扩展Int(或其他自定义类型)以符合某些协议?

swift

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

协议类型数组不能向下转换为具体类型数组

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)

arrays protocols downcast swift

15
推荐指数
1
解决办法
2487
查看次数

Xcode6:有没有简单的方法来复制大小类之间的约束?

我在wAny hAny size class中设置了约束,并且它适用于iPhone和iPad模拟器.

wAny hAny

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

wAny hCompact

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

检查员

那么,是否可以将所有约束从一个大小类应用到另一个大小类?

class autolayout xcode6 ios8

6
推荐指数
1
解决办法
1579
查看次数

Swift:无法为协议属性赋值?

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)

properties ios swift swift-protocols

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

MFC:从另一个线程调用CWnd方法是否安全?

其实我有两个问题:

  1. SendMessage从工作线程调用是否安全?
  2. CWnd方法,比如MessageBox,SendMessage在场景后调用API函数?

根据我的理解,当工作线程调用时SendMessage,它会将消息推送到UI线程的消息队列中,并等待直到处理此消息.在这种情况下,这样做是安全的.

我对此并不十分肯定.如果我错了,请纠正我.

非常感谢.

------------------------ update ------------------------- ---------

作为结论:

  • 调用Windows API ::SendMessage::PostMessage跨线程是安全的.
  • CWnd跨线程调用方法是不安全的.有些方法可能是安全的,但不能保证.

非常感谢大家.

c++ mfc multithreading cwnd sendmessage

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