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
评论列表
文章目录