相关疑难解决方法(0)

NSVotificationCenter在Swift中添加了addObserver

如何在Swift中将观察者添加到默认通知中心?我正在尝试移植这行代码,以便在电池电量发生变化时发送通知.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelChanged:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

nsnotificationcenter ios swift

382
推荐指数
9
解决办法
27万
查看次数

将协议和符合类(!)实例作为参数的函数

我试图弄清楚如何定义一个采用以下两个参数的函数:

  1. 协议.
  2. 符合该协议的(引用类型)的实例.

例如,给定

protocol P { }
class C : P { } // Class, conforming to P
class D { }     // Class, not conforming to P
struct E: P { } // Struct, conforming to P
Run Code Online (Sandbox Code Playgroud)

这应该编译:

register(P.self, obj: C()) // (1)
Run Code Online (Sandbox Code Playgroud)

但这些不应该编译:

register(P.self, obj: D()) // (2)  D does not conform to P
register(P.self, obj: E()) // (3)  E is not a class
Run Code Online (Sandbox Code Playgroud)

如果我们放弃第二个参数是类实例的条件,这很容易:

func register<T>(proto: T.Type, obj: T) {
    // ... …
Run Code Online (Sandbox Code Playgroud)

generics swift swift-protocols

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