在Swift中观察ObjC类的属性

stu7000

我正在使用一个第三方库,为此我有一个ObjC头文件。在此头文件中,有一个我想从我的Swift代码中观察到的属性。我的问题现在是:我可以在没有.m文件的情况下以某种方式扩展ObjC类,以便无论何时在Swift中对其进行更改时都可以观察到该属性吗?我曾考虑过使用KVO,但随后我需要更改ObjC类的实现吗?

谢谢你的帮助

代码不同

假设您的Objective-C类符合键值观察标准,则可以使用addObserver(_:forKeyPath:options:context:)这是一个例子:

// Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property NSString * name;
@property int age;

- (id) initWithName:(NSString *) name
                age:(int) age;

@end

// Person.m
#import "Person.h"

@implementation Person

- (id) initWithName:(NSString *) name
                age:(int) age
{
    if (self = [super init]) {
        self.name = name;
        self.age = age;
    }

    return self;
}

@end

在Swift中:

extension Person {
    override public func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if let keyPath = keyPath,
            let change = change,
            let oldValue = change[NSKeyValueChangeOldKey],
            let newValue = change[NSKeyValueChangeNewKey] {

            print("'\(keyPath)' has changed from \(oldValue) to \(newValue)")
        }
    }
}

let p = Person(name: "John", age: 42)

// Start observing changes
// In this case, the object will observe itself
p.addObserver(p, forKeyPath: "name", options: [.New, .Old], context: nil)
p.addObserver(p, forKeyPath: "age", options: [.New, .Old], context: nil)

p.name = "Jack"
p.age = 50

// You must remove all observers before releasing the object
p.removeObserver(p, forKeyPath: "name")
p.removeObserver(p, forKeyPath: "age")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何观察可观察类的属性

来自分类Dev

它是一种在Swift中观察全局变量的方法吗?

来自分类Dev

Swift类添加“ @objc”的原因

来自分类Dev

无法在Polymer.dart中的Safari 8.0(iPad,iOS 8.1.3)中观察嵌套元素的属性

来自分类Dev

在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

来自分类Dev

对不继承自Objective-C类的Swift类使用@objc属性

来自分类Dev

如何在RxSwift中观察数组属性的变化

来自分类Dev

观察类实例的属性更改

来自分类Dev

在类中观察静态var的值?

来自分类Dev

在Angular 2中观察对象属性的变化

来自分类Dev

当source是一个类时,可以从rxjs中观察到“ this”元素吗?

来自分类Dev

在DialogFragment中观察Viewmodel Livedata

来自分类Dev

Swift Combine-在N个对象数组内的对象中观察属性并与其他属性合并

来自分类Dev

在Repository类中观察Forever是一个好习惯吗?db + network页面列表

来自分类Dev

如何在ViewModel中观察Repository类的返回值?

来自分类Dev

Swift中的属性观察器

来自分类Dev

它是一种在Swift中观察全局变量的方法吗?

来自分类Dev

在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

来自分类Dev

如何在EmberJS中观察计算属性?创建类似FB的通知功能

来自分类Dev

如何在ObservableList中观察项目的属性更改

来自分类Dev

在Angular 2中观察对象属性的变化

来自分类Dev

Swift语言中观察者属性didSet和willSet的用途是什么?

来自分类Dev

当source是一个类时,可以从rxjs中观察到“ this”元素吗?

来自分类Dev

在swift中导入swift链接的objc类

来自分类Dev

Swift 属性观察器问题

来自分类Dev

SWIFT 中观察功能的工作原理

来自分类Dev

KVO 可观察属性在 Swift 中的类中的位置

来自分类Dev

在 Aurelia 中观察数组属性

来自分类Dev

无法在 Swift 中观察 UIPageControl 的 currentPage 变化

Related 相关文章

  1. 1

    如何观察可观察类的属性

  2. 2

    它是一种在Swift中观察全局变量的方法吗?

  3. 3

    Swift类添加“ @objc”的原因

  4. 4

    无法在Polymer.dart中的Safari 8.0(iPad,iOS 8.1.3)中观察嵌套元素的属性

  5. 5

    在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

  6. 6

    对不继承自Objective-C类的Swift类使用@objc属性

  7. 7

    如何在RxSwift中观察数组属性的变化

  8. 8

    观察类实例的属性更改

  9. 9

    在类中观察静态var的值?

  10. 10

    在Angular 2中观察对象属性的变化

  11. 11

    当source是一个类时,可以从rxjs中观察到“ this”元素吗?

  12. 12

    在DialogFragment中观察Viewmodel Livedata

  13. 13

    Swift Combine-在N个对象数组内的对象中观察属性并与其他属性合并

  14. 14

    在Repository类中观察Forever是一个好习惯吗?db + network页面列表

  15. 15

    如何在ViewModel中观察Repository类的返回值?

  16. 16

    Swift中的属性观察器

  17. 17

    它是一种在Swift中观察全局变量的方法吗?

  18. 18

    在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

  19. 19

    如何在EmberJS中观察计算属性?创建类似FB的通知功能

  20. 20

    如何在ObservableList中观察项目的属性更改

  21. 21

    在Angular 2中观察对象属性的变化

  22. 22

    Swift语言中观察者属性didSet和willSet的用途是什么?

  23. 23

    当source是一个类时,可以从rxjs中观察到“ this”元素吗?

  24. 24

    在swift中导入swift链接的objc类

  25. 25

    Swift 属性观察器问题

  26. 26

    SWIFT 中观察功能的工作原理

  27. 27

    KVO 可观察属性在 Swift 中的类中的位置

  28. 28

    在 Aurelia 中观察数组属性

  29. 29

    无法在 Swift 中观察 UIPageControl 的 currentPage 变化

热门标签

归档