Giter VIP home page Giter VIP logo

Comments (5)

kzaher avatar kzaher commented on May 21, 2024

Will try to figure out how to make this more user friendly. Have some ideas.

from rxswift.

kzaher avatar kzaher commented on May 21, 2024

Hm, I've tried to play with some ideas, but I don't right now I don't see a way to trick Swift compiler into some kind of default return value.

@mbalex99 Do you have some ideas?

I've documented everything here https://github.com/kzaher/RxSwift/blob/master/Documentation/GettingStarted.md#kvo

Don't see we can do anything else. I've thought about adding rx_observeAnyObject -> Observable<AnyObject?> but it seems ugly, and it doesn't really solve the original issue.

Let me know what do you think.

from rxswift.

mbalex99 avatar mbalex99 commented on May 21, 2024

I think rx_observeAsAnyObject or yet rx_observeKVO

You can't easily cast generic's types. It's not good practice. So I think explicitly having rx_observeAsAnyObject makes it clear that you'll have to cast it yourself. It should be okay in the mean time.

Maybe an option is to transform the KVO object into a Variable then just make rx_observe as an alias to that value.

from rxswift.

kzaher avatar kzaher commented on May 21, 2024

Hm,

I guess I can add rx_observeAsAnyObject(...) -> Observable<AnyObject?>, and write it in front of other overloads to allow users to more easily express that they want AnyObject as return type. I understand that people have different backgrounds, and I don't want to make more confusing then the problem requires.

I would really like to maintain current api because correctly unwrapping CGPoint and other structs is not so trivial as one might think :)

This is the code needed to correctly unwrap CGRect, it's not just as! :)

#if arch(x86_64) || arch(arm64)
let CGRectType = "{CGRect={CGPoint=dd}{CGSize=dd}}"
#elseif arch(i386) || arch(arm)
let CGRectType = "{CGRect={CGPoint=ff}{CGSize=ff}}"
#endif
// rx_observe + CoreGraphics
extension NSObject {
    public func rx_observe(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial, retainSelf: Bool = true) -> Observable<CGRect?> {
        return rx_observe(keyPath, options: options, retainSelf: retainSelf) as Observable<NSValue?>
            >- map { value in
                if let value = value {
                    if strcmp(value.objCType, CGRectType) != 0 {
                        return nil
                    }
                    var typedValue = CGRect(x: 0, y: 0, width: 0, height: 0)
                    value.getValue(&typedValue)
                    return typedValue
                }
                else {
                    return nil
                }
            }
    }

Do you think that adding rx_observeAsAnyObject(...) -> Observable<AnyObject?> would solve your concern?

Any other opinions/suggestions on this?

from rxswift.

bontoJR avatar bontoJR commented on May 21, 2024

I guess this has been addressed in the development cycle of RxSwift 2.0.

I will close this issues, if anyone has something interesting to say about this, please consider opening a new issue referring to this one. :)

from rxswift.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.