一个功能,两个平台,三种语言 -(iOS,Swift,Android)App代码实现对比篇

-调研

话说移动互联网正值风起云涌期间,各路编程高手都是摩拳擦掌,何况企业公司都开始接受现实,走移动办公,信息云端,大数据处理的步伐,在这本该三足鼎立的时刻,微软显得有点步履蹒跚,导致移动端最值得进军的平台被iOS 和 Android 几乎瓜分,这不符合历史轨迹啊,希望 WP 能厚积薄发,重回当年PC时代的辉煌。


-前序

这里就不再指点江山,直奔主题吧,来看看做同样一个功能,在iOS平台和Android平台都是具体如何实现的,代码是如何写的,这里有个分支就是iOS平台开发又分为Objective-C 和 Swift 两种语言,下面就具体来分析实现一个功能,在两个平台里,使用三种语言都是具体怎么来实现的,希望给入门无法判断开始那种语言的朋友一个指引,也能给转型iOS或Android跨平台开发的朋友一点借鉴,看看到底 Objective-C,Swift 和 Java 到底谁才更具有潜力,注意,具体代码实现不讲解,需要有一定的编程经验。


-需求

1,A页面输入 文字 ,点击下一页Push进来B页面,此时B页面显示A页面输入的文字;

2,B页面输入 文字,点击返回Pop到A页面,此时A页面显示B页面输入的文字;

3,即页面传值功能,暂且叫它礼尚往来,全部用纯代码来写;


-实现

一,iOS 之 Objective-C

1,A页面代码;

//MainViewController.m 

#import "MainViewController.h"
#import "SubViewController.h"

#define kIPHONE_WIDTH [UIScreen mainScreen].bounds.size.width

@interface MainViewController ()<ExchangeGiftDelegate>
{
    UITextField *inputTextField;
    UILabel *giftLbl;
}

@end

@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.title = @"礼尚";
    self.view.backgroundColor = [UIColor whiteColor];

    
    inputTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, 120, kIPHONE_WIDTH-140, 40)];
    inputTextField.placeholder = @"输入要赠送礼品名称";
    inputTextField.borderStyle = UITextBorderStyleLine;
    inputTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [self.view addSubview:inputTextField];

    UIButton *sendBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    sendBtn.frame = CGRectMake(kIPHONE_WIDTH-100, 120, 80, 40);
    sendBtn.backgroundColor = [UIColor redColor];
    [sendBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    sendBtn.titleLabel.textAlignment = NSTextAlignmentRight;
    sendBtn.titleLabel.font = [UIFont systemFontOfSize:18];
    [sendBtn setTitle:@"送礼" forState:UIControlStateNormal];
    [sendBtn addTarget:self action:@selector(sendBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:sendBtn];
    
    giftLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 170, kIPHONE_WIDTH-40, 40)];
    giftLbl.backgroundColor = [UIColor lightGrayColor];
    giftLbl.textColor = [UIColor greenColor];
    giftLbl.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:giftLbl];
    
}

-(void)sendBtnClick:(id)sender
{
    NSLog(@"开始送礼");
    
    if (inputTextField.text.length>0) {
        
        [self sendGiftName:inputTextField.text];
        
        inputTextField.text = @"";
        
    }else{
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"黄色警告" message:@"没有礼物送,不厚道吧" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil];
        [alertView show];
        [inputTextField becomeFirstResponder];
    }
}

-(void)sendGiftName:(NSString*)name
{
    NSLog(@"开始送礼:%@",name);
    
    SubViewController *subViewController = [[SubViewController alloc] init];
    subViewController.giftNameStr = name;
    subViewController.delegate = self;
    [self.navigationController pushViewController:subViewController animated:YES];
}

#pragma mark- ExchangeGiftDelegate
-(void)exchangeGiftName:(NSString *)name
{
    giftLbl.text = name;
}


2,B页面代码;

//SubViewController.h

#import <UIKit/UIKit.h>
@protocol ExchangeGiftDelegate <NSObject>
-(void)exchangeGiftName:(NSString *)name;
@end

@interface SubViewController : UIViewController

@property (nonatomic, strong) NSString *giftNameStr;

@property (nonatomic, weak) id<ExchangeGiftDelegate> delegate;

@end

//SubViewController.m

#import "SubViewController.h"

#define kIPHONE_WIDTH [UIScreen mainScreen].bounds.size.width


@interface SubViewController ()
{
    UITextField *inputTextField;
    UILabel *giftLbl;
}

@end

@implementation SubViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.title = @"往来";
    self.view.backgroundColor = [UIColor whiteColor];
    
    inputTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, 120, kIPHONE_WIDTH-140, 40)];
    inputTextField.placeholder = @"输入回送的礼品名称";
    inputTextField.borderStyle = UITextBorderStyleLine;
    inputTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [self.view addSubview:inputTextField];
    
    UIButton *sendBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    sendBtn.frame = CGRectMake(kIPHONE_WIDTH-100, 120, 80, 40);
    sendBtn.backgroundColor = [UIColor redColor];
    [sendBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    sendBtn.titleLabel.textAlignment = NSTextAlignmentRight;
    sendBtn.titleLabel.font = [UIFont systemFontOfSize:18];
    [sendBtn setTitle:@"回礼" forState:UIControlStateNormal];
    [sendBtn addTarget:self action:@selector(sendBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:sendBtn];
    
    giftLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 170, kIPHONE_WIDTH-40, 40)];
    giftLbl.backgroundColor = [UIColor lightGrayColor];
    giftLbl.textColor = [UIColor purpleColor];
    giftLbl.textAlignment = NSTextAlignmentCenter;
    giftLbl.text = self.giftNameStr;
    [self.view addSubview:giftLbl];


}

-(void)sendBtnClick:(id)sender
{
    NSLog(@"开始回礼");
    
    if (inputTextField.text.length>0) {
        
        [self sendGiftName:inputTextField.text];
        [self.navigationController popViewControllerAnimated:YES];
        
    }else{
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"红色警告" message:@"没有礼物回赠,好小气呀" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil];
        [alertView show];
        [inputTextField becomeFirstResponder];
    }
}

-(void)sendGiftName:(NSString*)name
{
    if ([self.delegate respondsToSelector:@selector(exchangeGiftName:)]) {
        [self.delegate exchangeGiftName:inputTextField.text];
    }
}

二,iOS 之 Swift

1,A页面代码;

//MainViewController.swift

import UIKit

class MainViewController: UIViewController,ExchangeGiftDelegate {

    let kIPHONE_WIDTH = UIScreen.mainScreen().bounds.size.width
    
    var inputTextField : UITextField!
    var giftLbl:UILabel = UILabel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.title = "礼尚"
        self.view.backgroundColor = UIColor.whiteColor()
        
        
        inputTextField = UITextField(frame: CGRectMake(20, 120, kIPHONE_WIDTH-140, 40))
        inputTextField.placeholder = "输入要赠送礼品名称"
        inputTextField.borderStyle = UITextBorderStyle.Line
        inputTextField.textAlignment = NSTextAlignment.Center
        inputTextField.clearButtonMode = UITextFieldViewMode.WhileEditing
        self.view.addSubview(inputTextField)

        
        let sendBtn:UIButton = UIButton()
        sendBtn.frame = CGRectMake(kIPHONE_WIDTH-100, 120, 80, 40)
        sendBtn.backgroundColor = UIColor.redColor()
        sendBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        sendBtn.setTitle("送礼", forState: UIControlState.Normal)
        sendBtn.addTarget(self, action: "sendBtnClick:", forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(sendBtn)
        
        //let giftLbl : UILabel = UILabel()
        giftLbl.frame = CGRectMake(20, 170, kIPHONE_WIDTH-40, 40)
        giftLbl.backgroundColor = UIColor.lightGrayColor()
        giftLbl.textColor = UIColor.greenColor()
        giftLbl.textAlignment = NSTextAlignment.Center
        self.view.addSubview(giftLbl)

    }

    func sendBtnClick(sneder:UIButton)
    {
        println("开始送礼");

        sendGiftName()
    }
    
    func sendGiftName(){
        
        if inputTextField.text.isEmpty {
            
            var alert : UIAlertView = UIAlertView(title: "黄色警告", message: "没有礼物送,不厚道吧", delegate: nil, cancelButtonTitle: "知道了")
            alert.show()
            inputTextField.becomeFirstResponder()
            
        }else{
            
            sendGiftName(inputTextField.text)
            inputTextField.text = ""
        }
    }
    
    func sendGiftName(name:NSString){
        
        var subVC :SubViewController = SubViewController()
        subVC.giftNameStr = self.inputTextField.text;
        subVC.delegate = self;
        self.navigationController?.pushViewController(subVC, animated: true)
    }
    
    //ExchangeGiftDelegate
    func exchangeGiftName(name: NSString) {
        giftLbl.text = name
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

2,B页面代码;

//SubViewController.swift

import UIKit

@objc protocol ExchangeGiftDelegate{
   optional func exchangeGiftName(name : NSString)
}

class SubViewController: UIViewController {

    let kIPHONE_WIDTH = UIScreen.mainScreen().bounds.size.width
    
    var inputTextField : UITextField!
    var giftLbl : UILabel = UILabel()
    
    var giftNameStr : NSString!
    
    var delegate:ExchangeGiftDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.title = "往来"
        self.view.backgroundColor = UIColor.whiteColor()
        
        inputTextField = UITextField(frame: CGRectMake(20, 120, kIPHONE_WIDTH-140, 40))
        inputTextField.placeholder = "输入回送的礼品名称"
        inputTextField.borderStyle = UITextBorderStyle.Line
        inputTextField.textAlignment = NSTextAlignment.Center
        inputTextField.clearButtonMode = UITextFieldViewMode.WhileEditing
        self.view.addSubview(inputTextField)
        
        let sendBtn:UIButton = UIButton()
        sendBtn.frame = CGRectMake(kIPHONE_WIDTH-100, 120, 80, 40)
        sendBtn.backgroundColor = UIColor.redColor()
        sendBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        sendBtn.setTitle("回礼", forState: UIControlState.Normal)
        sendBtn.addTarget(self, action: "sendBtnClick:", forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(sendBtn)
        
        giftLbl.frame = CGRectMake(20, 170, kIPHONE_WIDTH-40, 40)
        giftLbl.backgroundColor = UIColor.lightGrayColor()
        giftLbl.textColor = UIColor.purpleColor()
        giftLbl.textAlignment = NSTextAlignment.Center
        giftLbl.text = giftNameStr
        self.view.addSubview(giftLbl)
    }
    
    func sendBtnClick(sneder:UIButton)
    {
        sendGiftName()
    }
    
    func sendGiftName(){
        
        if inputTextField.text.isEmpty {
            
            var alert : UIAlertView = UIAlertView(title: "红色警告", message: "没有礼物回赠,好小气呀", delegate: nil, cancelButtonTitle: "知道了")
            alert.show()
            inputTextField.becomeFirstResponder()
            
        }else{
            
            delegate?.exchangeGiftName!(inputTextField.text)
            self.navigationController?.popViewControllerAnimated(true)
        }
    }

三,Android 之 Java

1,A页面代码;

//activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/minput"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <Button
            android:id="@+id/msendBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/mname" />

    </LinearLayout>


    <TextView
        android:id="@+id/mgiftname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/minput"
        android:layout_marginTop="20dp"
        android:textSize="40px"
        android:textColor="@color/background_material_dark"
        android:gravity="center" />

</LinearLayout>

//MainActivity.java

public class MainActivity extends ActionBarActivity implements View.OnClickListener {

    private static final int REQUST_CODE = 0;
    private EditText inputEditText;
    private Button  sendBtn;
    private TextView giftTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("礼尚");

        inputEditText = (EditText)findViewById(R.id.minput);
        sendBtn = (Button)findViewById(R.id.msendBtn);
        giftTextView = (TextView)findViewById(R.id.mgiftname);


        sendBtn.setOnClickListener(this);
    }



    @Override
    public void onClick(View v) {
        Log.i("TAG","送礼");

        String giftName = inputEditText.getText().toString();
        if (giftName.length()>0){

            Intent intent = new Intent(MainActivity.this,SubActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("name", giftName);
            intent.putExtras(bundle);
            startActivityForResult(intent,0);

            inputEditText.setText("");

        }else {

            Toast.makeText(this,"没有礼物送,不厚道吧",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){

            case REQUST_CODE:
            {
                switch (resultCode){
                    case RESULT_OK:
                    {
                        Bundle bundle = data.getExtras();
                        giftTextView.setText(bundle.getString("name"));
                    }
                    break;
                }
            }
            break;
        }

        super.onActivityResult(requestCode, resultCode, data);
    }

}

2,B页面代码;

//activity_sub.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/sinput"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <Button
            android:id="@+id/ssendBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sname" />

    </LinearLayout>


    <TextView
        android:id="@+id/sgiftname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/minput"
        android:layout_marginTop="20dp"
        android:textSize="40px"
        android:textColor="@color/material_blue_grey_900"
        android:gravity="center" />

</LinearLayout>

//SubActivity.java

public class SubActivity extends ActionBarActivity implements View.OnClickListener {

    private EditText inputEditText;
    private Button sendBtn;
    private TextView giftTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        inputEditText = (EditText)findViewById(R.id.sinput);
        sendBtn = (Button)findViewById(R.id.ssendBtn);
        giftTextView = (TextView)findViewById(R.id.sgiftname);

        sendBtn.setOnClickListener(this);

        Bundle bundle = this.getIntent().getExtras();
        giftTextView.setText(bundle.getString("name"));


    }


    @Override
    public void onClick(View v) {
        Log.i("TAG", "回礼");

        String giftName = inputEditText.getText().toString();
        if (giftName.length()>0){

            Intent intent = new Intent(SubActivity.this,MainActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("name", giftName);
            intent.putExtras(bundle);
            setResult(RESULT_OK,intent);
            finish();

        }else {

            Toast.makeText(this, "没有礼物回赠,好小气呀", Toast.LENGTH_SHORT).show();
        }
    }
}

//strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">礼尚往来</string>
    <string name="action_settings">Settings</string>
    <string name="mname">送礼</string>
    <string name="title_activity_sub">往来</string>
    <string name="sname">回礼</string>

</resources>

-附图(Swift 运行效果)

技术分享


-总结

代码量:Swift 明显占优势,但是对于习惯OC的人来说,有点乱七八糟,但是非常适合入门朋友,特别是从JS转过来的;

逻辑:OC 和 Swift 基本一致,通过协议委托方式来完成传值,但是安卓采用隐式方式来传递,逻辑上较iOS来显得更合理和易于理解;

总之,三种语言都有自己的风格和写法,具体选择那种,往往和自己之前的工作经验有关系,萝卜青菜,各有所爱吧,希望看完对大家有所启示就好,另外,笔者只是一个代码传道者而已,若有笔误,敬请谅解,原创博客,转载请注明出处,谢谢。




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。