objcnew.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:pythonista-scripts 作者: khilnani 项目源码 文件源码
def ns(py_obj):
    '''Convert common Python objects to their ObjC equivalents, i.e. str => NSString, int/float => NSNumber, list => NSMutableArray, dict => NSMutableDictionary, bytearray => NSData, set => NSMutableSet. Nested structures (list/dict/set) are supported. If an object is already an instance of ObjCInstance, it is left untouched.
        '''
    if isinstance(py_obj, ObjCInstance):
        return py_obj
    if isinstance(py_obj, c_void_p):
        return ObjCInstance(py_obj)
    if isinstance(py_obj, ui.View):
        return ObjCInstance(py_obj)
    if isinstance(py_obj, str):
        return NSString.stringWithUTF8String_(py_obj)
    if isinstance(py_obj, unicode):
        return NSString.stringWithUTF8String_(py_obj.encode('utf-8'))
    elif isinstance(py_obj, bytearray):
        return NSData.dataWithBytes_length_(str(py_obj), len(py_obj))
    elif isinstance(py_obj, int):
        return NSNumber.numberWithInt_(py_obj)
    elif isinstance(py_obj, float):
        return NSNumber.numberWithDouble_(py_obj)
    elif isinstance(py_obj, bool):
        return NSNumber.numberWithBool_(py_obj)
    elif isinstance(py_obj, list):
        arr = NSMutableArray.array()
        for obj in py_obj:
            arr.addObject_(ns(obj))
        return arr
    elif isinstance(py_obj, set):
        s = NSMutableSet.set()
        for obj in py_obj:
            s.addObject_(ns(obj))
        return s
    elif isinstance(py_obj, dict):
        dct = NSMutableDictionary.dictionary()
        for key, value in py_obj.iteritems():
            dct.setObject_forKey_(ns(value), ns(key))
        return dct
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号