zoukankan      html  css  js  c++  java
  • 【原创】用一个登陆的例子详细学习ObjectC基本语法

      最近打算好了,在开发Android项目之余,把IOS开发学习一下。有兴趣的同学可以和我一起学习。

      下面我用一个登陆的例子记录一下ObjectC的语法,我不是一个喜欢打字的人,我的讲解都在注释里面了。

      不过,我保证,每一行代码,每一行注释都是有用的。希望能够帮助新入门的朋友。

      下面是我的工程的目录结构:

      

      接下来我会按上面的顺序贴上源码:

      main.m

    //
    //  main.m
    //  t
    //
    //  Created by JiaYing.Cheng on 13-8-14.
    //  Copyright (c) 2013年 DaoCaoWu. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "LoginService.h"
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            LoginService *loginService = [[LoginService alloc] init];
            UserBean *user = [[UserBean alloc] init];
    //        id 是一个指针类型,可以指向任何类型的对象
            id obj = (UserBean *)user;
    
            [loginService setUserName:@"adao12" setPassword:@"000000"];
    
            //貌似调用无参方法不用加"[]"哦
            if (loginService.login) {
                NSLog(@"登陆成功");
            } else {
                NSLog(@"登陆失败");
            }
    
    //        [user setUserName:@"adao12" setPassword:@"000000"];
            [obj setUserName:@"adao12" setPassword:@"000000"];
    //        [user setUserName:NULL setPassword:NULL];//C式的空值NULL也可以用
    //        [user setUserName:nil setPassword:nil];//赋空值采用nil,但不像Java,ObjectC可以对值为nil的对象传递讯息
            //总之,nil和NULL是一样的,我们使用nil而不用NULL是因为我们用来表示对象的指针为空
    //        if ([loginService login:user]) {
            if ([loginService login:obj]) {
                NSLog(@"登陆成功");
            } else {
                NSLog(@"登陆失败");
            }
            
            if ([loginService login:@"adao12":@"000000"] == YES) {
                NSLog(@"登陆成功");
            } else {
                NSLog(@"登陆失败");
            }
    
        }
        return 0;
    }
    

      LoginService.h

    //
    //  LoginService.h
    //  t
    //
    //  Created by JiaYing.Cheng on 13-8-14.
    //  Copyright (c) 2013年 DaoCaoWu. All rights reserved.
    //
    
    //Object C 的文件导入用#import
    #import <Foundation/Foundation.h>
    #import "UserBean.h"
    
    //头文件声明用@interface 后面接的是类名
    //inheritance(继承) 用class : ParentClass 方式表示,这里是继承NSObject
    @interface LoginService : NSObject
    {
        //接口变量是不能用静态的方式声明的,要在前面加上*,声明为指针类型,
        //比如现在的NSString类型就要加,其他类型还没有测试,大家有兴趣的可以测试一下哈~
        //示范一下错误的声明
        //NSString userName;
        //NSString password;
        //下面才是正确的
        @private
        NSString *userName;
        NSString *password;
        //在@interface class : parentClass{ ... }花括号里面的是成员变量(instance variable)
    }
    
    /**
     *登陆业务
     * instance methods 成员方法
     * - 表示实例类型,也就是说,只有类的实例才能调用这个方法,用instance类型表示,
     *   如果是 + 则是class类型,直接调用,相当于C++和Java里面的静态(static)方法
     * (void) 是方法的返回类型,注意要加上括号,下次我们将探讨一下Object c的基本数据类型有哪些,有C有什么不一样
     * login 是方法名
     * 方法名后面直接加上了分号";",有点怪怪是不是?C++和Java里面是有括号的:protected void login();
     * 为什么是protected呢?因为在没有设定访问权限(public,protected,private)时,预设访问权限为protected
     * 这些都是规则而已,习惯就好了
     */
    - (BOOL)login;
    
    //对同时声明多个方法的表示方式[-/+ (returnType)method1Name:(param1Type)param1:(param2Type)param2 method2Name:(param1Type)param1 ...]
    //这种声明方式,调用的时候可以单独调用一个方法,也可以同时调用多个方法,但是这里有个有趣的问题可以探讨一下,如果返回类型不是void而是BOOLintNSString呢?返回什么?
    //我们下次再详细讨论
    - (void)setUserName:(NSString *)name setPassword:(NSString *)psw;
    
    - (BOOL)login:(UserBean *)user;
    
    - (BOOL)login:(NSString *)name :(NSString*)psw;
    
    /**
     *哈,我们现在只是写登陆,注册就不写啦,
     * 大家有没有发现C++,Java里面的多行注释还可以用。。
     *- (void) register;
     */
    
    //这时是定义完一个类后的标识@end
    @end
    

      LoginService.m

    //
    //  LoginService.m
    //  t
    //
    //  Created by JiaYing.Cheng on 13-8-14.
    //  Copyright (c) 2013年 DaoCaoWu. All rights reserved.
    //
    
    #import "LoginService.h"
    
    //以@implementation className开始
    @implementation LoginService
    
    //LoginService的无参构造器
    - (LoginService *)init
    {
        //这里的超类的init方法的名称是不能改变的
        self = [super init];//这句不能漏了
        if (self) {//这句不能漏了
            /*do what you want to do in here*/
            userName = @"adao11";
            password = @"000000";
        }
        return self;//这句不能漏了
    }
    
    //LoginService的有参构造器
    - (LoginService *) init:(NSString *)name setPassword:(NSString *)psw
    {
        self = [super init];//这句不能漏了
        if (self) {//这句不能漏了
            /*do what you want to do in here*/
            //调用自身方法
            [self setUserName:name setPassword:psw];
        }
        return self;//这句不能漏了
    }
    
    //无参登陆,在设置用户名和密码后调用
    - (BOOL)login
    {
        //判断语句和C++、Java一样,逻辑运算符也是一样的哦
        //方法调用语句要用"[ ... ]"括起来,表示方式是[对象实例 方法名:参数1:参数2 ...]
        if ([userName isEqual: @"adao12"] && [password isEqual:@"000000"]) {
            return YES;
        }
        //布尔类型(BOOL、Boolean)的值是YES和NO,当然,如果你不习惯,也可以用TRUE和FALSE
        return NO;
    }
    
    //设置用户名和密码
    - (void)setUserName:(NSString *)name setPassword:(NSString *)psw
    {
        //变量赋值,=号赋值
        userName = name;
        password = psw;
    }
    
    //传入实体对象进行登陆
    -(BOOL)login:(UserBean *)user
    {
        if ([user.getUserName isEqual:@"adao12"] && [user.getPassword isEqual:@"000000"]) {
            return YES;
        }
        return NO;
    }
    
    //传入用户名和密码进行登陆
    -(BOOL)login:(NSString *)name :(NSString *)psw
    {
        if ([name isEqual: @"adao12"] && [psw isEqual:@"000000"]) {
            return YES;
        }
        return NO;
    }
    
    //以@end结束
    @end
    

      UserBean.h

    //
    //  UserBean.h
    //  t
    //
    //  Created by JiaYing.Cheng on 13-8-14.
    //  Copyright (c) 2013年 DaoCaoWu. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface UserBean:NSObject
    {
        NSString *userName;
        NSString *password;
    }
    
    //对同时声明多个方法的表示方式[-/+ (returnType) method1Name : (param1Type)param1 : (param2Type)param2 method2Name : (param1Type)param1 ...]
    //这种声明方式,调用的时候可以单独调用一个方法,也可以同时调用多个方法,但是这里有个有趣的问题可以探讨一下,如果返回类型不是void而是BOOLintNSString呢?返回什么?
    //我们下次再详细讨论
    - (void)setUserName:(NSString *)name setPassword:(NSString *)password;
    
    //- (void)setUserName:(NSString *)userName;
    
    - (NSString *)getUserName;
    
    //- (void)setPassword:(NSString *)password;
    
    - (NSString *)getPassword;
    
    
    @end
    

      UserBean.m

    //
    //  UserBean.m
    //  t
    //
    //  Created by JiaYing.Cheng on 13-8-14.
    //  Copyright (c) 2013年 DaoCaoWu. All rights reserved.
    //
    
    #import "UserBean.h"
    
    @implementation UserBean
    
    - (void)setUserName:(NSString *)name setPassword:(NSString *)psw
    {
        userName = name;
        password = psw;
    }
    
    //-(void)setUserName:(NSString *)name
    //{
    //    userName = name;
    //}
    
    - (NSString *)getUserName
    {
        return userName;
    }
    
    //-(void)setPassword:(NSString *)psw
    //{
    //    password = psw;
    //}
    
    -(NSString *)getPassword
    {
        return password;
    }
    
    @end
    

      想要工程源码的可以留下邮箱,我看到后会发给需要的朋友。

      注:本代码没有加入内存管理代码,因为本文只是学习基本语法。

        有哪里不对的地方,欢迎拍砖!

      

  • 相关阅读:
    《追风筝的人》书摘与笔记
    《清单革命》读书笔记
    华为HMS Core音频服务,让有声世界更动听
    Unity平台 | 快速集成华为性能管理服务
    【Demo见真章】投稿赢HarmonyOS手机Beta公测名额
    【开发者必看】2020年移动应用趋势洞察白皮书
    华为帐号服务升级,助力应用快速验证用户身份
    简单的路径规划案例分享
    Cocos|快速集成华为AGC云存储服务
    Flutter平台 | 零代码快速集成AGC崩溃服务
  • 原文地址:https://www.cnblogs.com/daocaowu/p/3258801.html
Copyright © 2011-2022 走看看