首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中获取选择器名称作为对象的属性?

如何在Swift中获取选择器名称作为对象的属性?
EN

Stack Overflow用户
提问于 2014-10-21 15:38:57
回答 1查看 696关注 0票数 0

在使用rest JSON-API时,在整个应用程序中保持属性使用的一致性很方便,并且在此示例中调用服务器时也是如此:

代码语言:javascript
复制
class Picture: NSManagedObject {

    @NSManaged var copyright: String
    @NSManaged var likes: NSNumber
}


func postToServer() {
   let newPicture = Picture(copyright: "haaakon", likes:433)

   let arguments = @{  
       newPicture.copyright.selectorName : newPicture.copyright,
       newPicture.likes.selectorName : newPicture.likes 
   }

   println(arguments)
}

println应给出以下输出:

代码语言:javascript
复制
{ "copyright": "haaakon", "likes": "433" }

在给定属性上创建扩展(或其他解决方案)时,返回的基本相同于:

代码语言:javascript
复制
NSStringFromSelector(Selector(newPicture.copyright)) // returns "copyright"
newPicture.copyright.selectorName                    // returns "copyright"
EN

回答 1

Stack Overflow用户

发布于 2014-10-21 17:06:15

试试这个:

代码语言:javascript
复制
extension Picture{
    func dictionary() -> Dictionary<String, AnyObject> {
        var outCount: CUnsignedInt = 0
        let properties: UnsafeMutablePointer<objc_property_t> = class_copyPropertyList(self.dynamicType, &outCount)

        var result: Dictionary<String, AnyObject> = Dictionary()

        for var i = 0; i < Int(outCount); i++ {
            var property : NSString! = NSString(CString: property_getName(properties[i]), encoding: NSUTF8StringEncoding)
            result[property] = self.valueForKey(property)
        }

        return result
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26481292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档