小编Swi*_*ter的帖子

Swift使协议扩展成为通知观察者

我们考虑以下代码:

protocol A {
    func doA()
}

extension A {
  func registerForNotification() {
      NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardDidShow:"), name: UIKeyboardDidShowNotification, object: nil)
  }

  func keyboardDidShow(notification: NSNotification) {

  }
}
Run Code Online (Sandbox Code Playgroud)

现在看一下实现A的UIViewController子类:

class AController: UIViewController, A {
   override func viewDidLoad() {
      super.viewDidLoad()
      self.registerForNotification()
      triggerKeyboard()
   }

   func triggerKeyboard() {
      // Some code that make key board appear
   }

   func doA() {
   }
}
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,这会因错误而崩溃:

keyboardDidShow:]:无法识别的选择器发送到实例0x7fc97adc3c60

那么我应该在视图控制器本身中实现观察者吗?不能留在延期?

以下事情已经尝试过.

制作A类协议.将keyboardDidShow添加到协议本身作为签名.

protocol A:class {
   func doA()
   func keyboardDidShow(notification: NSNotification)
}
Run Code Online (Sandbox Code Playgroud)

ios swift swift2 protocol-extension

24
推荐指数
2
解决办法
6751
查看次数

Int,String等被认为是Swift中的"原始"吗?

表示使用swift中的结构实现的数字,字符和字符串的类型.

摘自官方文件:

通常在其他语言中被认为是基本或原始的数据类型(例如表示数字,字符和字符串的类型)实际上是命名类型,使用结构在Swift标准库中定义和实现.

这是否意味着以下内容:

Int
Float
String
// etc
Run Code Online (Sandbox Code Playgroud)

......不被视为原始人?

swift

21
推荐指数
3
解决办法
5920
查看次数

RxSwift合并了不同类型的Observable

我应该如何Observable在RxSwift中合并两种不同类型的s?

例如:

var a: Observable<Int>
var b: Observable<Void>
Run Code Online (Sandbox Code Playgroud)

Observable.of(a,b).merge() 因类型参数不同而无法实现.

frp swift rx-swift

14
推荐指数
2
解决办法
8739
查看次数

无法赋值给属性:函数调用返回不可变值

请考虑以下示例.

struct AStruct{
    var i = 0
}

class AClass{
    var i = 0
    var a: A = A(i: 8)

    func aStruct() -> AStruct{
        return a
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试改变类实例的变量,AClass它会成功编译.

var ca = AClass()
ca.a.i = 7
Run Code Online (Sandbox Code Playgroud)

但是如果我试图改变aStruct方法的返回值,编译就会尖叫

ca.aStruct().i = 8 //Compile error. Cannot assign to property: function call returns immutable value.
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗.

swift

8
推荐指数
3
解决办法
8475
查看次数

Swift初始化程序不返回值?

Swift文档明确指出.

与Objective-C初始值设定项不同,Swift初始值设定项不返回值.

请解释下面的语法.

let instanceOfString = String()
Run Code Online (Sandbox Code Playgroud)

它通过调用初始化程序并返回它来初始化String对象.值被分配给instanceOfString.不是吗?

ios swift

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

标签 统计

swift ×5

ios ×2

frp ×1

protocol-extension ×1

rx-swift ×1

swift2 ×1