Skip to content

在Swift项目中保持OC环境来使用MJExtension #171

Closed
@WenchaoD

Description

@WenchaoD

Hi,MJ老师:
现在在Swift下通过标题叙述的方法并将Model模型引入到Swift的Bridge Header中也能成功使用这个框架。只是有些方法可能不是表面上那样,比如:

MJPerson *person = [MJPerson objectWithKeyValues : dictionary];

在Swift中就变成了

let person = MJPerson(keyValues : dictionary)

而不是很多人想象的

let persion = MJPerson.objectWithKeyValues(dictinoary)

关于这个方法,我想pr一个example不知是否可行?
还是打算出一个纯Swift版本就不用这样做了?

Activity

CoderMJLee

CoderMJLee commented on Aug 19, 2015

@CoderMJLee
Owner

因为Swift和OC的数据类型很多是不统一的,所以目前OC版本的MJExtension在Swift中应该还是存在一些小问题的,比如对模型类型\NSString类型的解析。打算后期出一个纯Swift版本

WenchaoD

WenchaoD commented on Aug 19, 2015

@WenchaoD
Author

使用OC写模型类,引入bridge header然后在swift中使用,这样用MJExtension解析就没有任何问题

WenchaoD

WenchaoD commented on Aug 19, 2015

@WenchaoD
Author

比如,在swift中导入MJExtension和OC的User类:

//
//  User.h
//  字典与模型的互转
//
//  Created by MJ Lee on 14-5-21.
//  Copyright (c) 2014年 小码哥. All rights reserved.
//  用户模型

#import <Foundation/Foundation.h>

typedef enum {
    SexMale,
    SexFemale
} Sex;

@interface User : NSObject
/** 名称 */
@property (copy, nonatomic) NSString *name;
/** 头像 */
@property (copy, nonatomic) NSString *icon;
/** 年龄 */
@property (assign, nonatomic) unsigned int age;
/** 身高 */
@property (copy, nonatomic) NSString *height;
/** 财富 */
@property (strong, nonatomic) NSNumber *money;
/** 性别 */
@property (assign, nonatomic) Sex sex;
/** 同性恋 */
@property (assign, nonatomic, getter=isGay) BOOL gay;
@end

然后在Bridge Header中引入:

#import "MJExtension.h"
#import "User.h"

然后在Swift的main.swift中

func keyValue2object() {

    // 1.定义一个字典
    let dict = [
        "name" : "Jack",
        "icon" : "lufy.png",
        "age" : "20",
        "height" : 1.55,
        "money" : "100.9",
        "sex" : SexFemale.value.description,
        "gay" : "true"
    ]

    // 2.将字典转为User模型
    let user = User(keyValues: dict) // 注意不是User.objectWithKeyValues(dict)

    // 3.打印User模型的属性
    println("name = \(user.name), icon=\(user.icon), age=\(user.age), height=\(user.height), money=\(user.money), sex=\(user.sex), gay=\(user.gay)")

}

keyValue2object()

输出:

name = Jack, icon=lufy.png, age=20, height=1.55, money=100.9, sex=C.Sex, gay=true
CoderMJLee

CoderMJLee commented on Aug 19, 2015

@CoderMJLee
Owner

嗯,是的,这样就没问题了。现在好多人直接用Swift定义Model,阻止不了这个行为,哈哈。

WenchaoD

WenchaoD commented on Aug 19, 2015

@WenchaoD
Author

哈哈 期待Swift版本

liang-notes

liang-notes commented on Jun 14, 2016

@liang-notes

期待MJ出Swift版本

maksamster

maksamster commented on May 19, 2017

@maksamster

期待Swift版本

zooyf

zooyf commented on Sep 6, 2017

@zooyf

什么时候能出Swift版?期待!

zhangjianjun056

zhangjianjun056 commented on Sep 27, 2017

@zhangjianjun056

什么时候能出Swift版?期待!现在Swift4.0中,用Swift语法创建的model 不能解析数据了@CoderMJLee

xiaomi0424

xiaomi0424 commented on Feb 28, 2018

@xiaomi0424

期待swift版本。。已经等好久

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @CoderMJLee@WenchaoD@zooyf@maksamster@liang-notes

        Issue actions

          在Swift项目中保持OC环境来使用MJExtension · Issue #171 · CoderMJLee/MJExtension