OC中传入参数,返回多值(一)

看看先:

    // 日期格式化对象
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    // 设置日期格式
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

    // 2个日期对象
    NSDate *date1 = [fmt dateFromString:@"1970-01-01 00:00:01"];
    NSDate *date2 = [fmt dateFromString:@"1970-02-02 01:01:00"];

    // 从date1到date2之间走过的秒数
    NSInteger interval = [date2 timeIntervalSinceDate:date1];

    // 1分钟 = 60秒
    NSInteger secondsPerMinute = 60;

    // 1小时 = 60 * 60秒 = 3600秒
    NSInteger secondsPerHour = 60 * secondsPerMinute;

    // 1天 = 24 * 60  * 60秒
    NSInteger secondsPerDay = 24 * secondsPerHour;

    NSInteger day = interval / secondsPerDay;
    NSInteger hour = (interval % secondsPerDay) / secondsPerHour;
    NSInteger minute = ((interval % secondsPerDay) % secondsPerHour) / secondsPerMinute;
    NSInteger second = interval % secondsPerMinute;

    NSLog(@"%zd天%zd小时%zd分%zd秒", day, hour, minute, second);

能否将这段代码封装起来,传入一日期对象,返回天,小时,分钟,秒 ?

有几种常见的方法?

推荐使用哪种?

1.指针

指针知识回顾:

int age = 10;

int *p ;

p = &age;

//将100赋值给指针变量p所指向的存储空间 相当于 age = 100
*p = 100;

因此在方法的实现中:

 *dayP = interval / secondsPerDay;
 *hourP = (interval % secondsPerDay) / secondsPerHour;
 *minuteP = ((interval % secondsPerDay) % secondsPerHour) / secondsPerMinute;
 *secondP = interval % secondsPerMinute;

在方法的调用中:

 NSInteger day = 0;
    NSInteger hour = 0;
    NSInteger minute = 0;
    NSInteger second = 0;

    [date2 zlf_intervalSinceDate:date1 day:&day hour:&hour minute:&minute second:&second];

    NSLog(@"%zd天%zd小时%zd分%zd秒", day, hour, minute, second);

但是这种传入的参数太多,能否只传入日期,返回天,小时,分钟,秒 ?

2.集合  (通过集合装着返回的数据, 但只能装对象)

2.1数组

实现:

   NSInteger day = interval / secondsPerDay;
   NSInteger hour = (interval % secondsPerDay) / secondsPerHour;
   NSInteger minute = ((interval % secondsPerDay) % secondsPerHour) / secondsPerMinute;
   NSInteger  second = interval % secondsPerMinute;

   return @[@(day), @(hour), @(minute), @(second)];

调用:

NSArray *interval = [date2 zlf_intervalSinceDate:date1];

NSInteger day = [interval[0] integerValue];

NSInteger hour = [interval[1] integerValue];

NSInteger minute = [interval[2] integerValue];

NSInteger second = [interval[3] integerValue];

NSLog(@"%zd天%zd小时%zd分%zd秒", day, hour, minute, second);

这样调用起来很不友好,乃至调用的时候压根不知道0,1,2,3代表的含义。必须进入到实现文件中查看。

因此可以和枚举一起使用,这样调用起来稍微好些。

定义枚举

typedef enum {
    /** 天 */
    ZLFIntervalIndexDay = 0,
    /** 小时 */
    ZLFIntervalIndexHour = 1,
    /** 分钟 */
    ZLFIntervalIndexMinute = 2,
    /** 秒 */
    ZLFIntervalIndexSecond = 3,
} ZLFIntervalIndex;

这样调用起来(至少有提示,知道数组中每个对象的含义):

 NSArray *interval = [date2 zlf_intervalSinceDate:date1];

        NSInteger day = [interval[ZLFIntervalIndexDay] integerValue];
        NSInteger hour = [interval[ZLFIntervalIndexHour] integerValue];
        NSInteger minute = [interval[ZLFIntervalIndexMinute] integerValue];
        NSInteger second = [interval[ZLFIntervalIndexSecond] integerValue];

        NSLog(@"%zd天%zd小时%zd分%zd秒", day, hour, minute, second);
时间: 2024-12-24 18:32:02

OC中传入参数,返回多值(一)的相关文章

自定义函数中的参数返回值 “-> (Int -> Int)”的问题

func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() println(increment(7)) 这里为什么要写两个 Int->Int 这里是返回值是参数,左边是参数,右边是返回值的意思. 自定义函数中的参数返回值 "-> (Int

Main方法中传入参数

↓ 这个时候会报错: Instantiate the class:DonutShop java.lang.ClassNotFoundException: DonutShop    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findCla

c++中函数参数的求值顺序

c++中如果函数的参数列表包含多个实参,那么对参数的求值顺序是不确定的. 在谭浩强的<C++程序设计>(第二版)P94中提到,GCC对参数求值是按从右到左的顺序求值的. 但我实测并非如此. #include <iostream> #include <iomanip> using namespace std; void test(int x, int y) { cout << 'x' << x << " y" <

Java基础---Java中带参数返回值方法的使用(四十)

Java 中带参带返回值方法的使用 如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法. 例如:下面的代码,定义了一个 show 方法,带有一个参数 name ,方法执行后返回一个 String 类型的结果 调用带参带返回值的方法: 运行结果: 代码: import java.util.Arrays; public class HelloWorld {    public static void main(String[] args) {  HelloWorld hello = new

php与js中函数参数的默认值设置

php函数参数默认值设置: <?phpfunction test($val=3){   echo $val."<br/>";}test(11);test();?> javascript函数参数默认值设置function test(){alert("test函数");} function test2(val,func){ val=val||"";//利用js中的或操作,第一个参数值为false(为空)时返回第二个参数的值.第

任意多的整型参数返回最值

1 #定义一个方法 func,该func可以引入任意多的整型参数,结果返回其中最大与最小的值. 2 def func1(*nums): 3 for i in nums: 4 if not isinstance(i,int): 5 return '无法比较,请保证全部是整数!' 6 #要使函数执行到这里时结束,比较好用的方式是return 7 #函数执行到return就会结束 8 9 return max(nums),min(nums) 10 11 print(func1(1,35,5,6,'s'

mybatis中传入参数的几种方式

第一种: Dao层的方法 Public User selectUser(String name,String password); 对应的Mapper.xm <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_password=#{1} </select> 第二种: 该方法采用M

Oracle存储过程中传入参数,传出字符串

create or replace procedure getStr(usercode in varchar2,str out varchar2) is v_sql varchar2(100); isEdit varchar2(2); isAdmin varchar2(2); begin v_sql:='select isedit,isadmin from f_user_access where usercode=:usercode'; execute immediate v_sql into

在xpath的xml路径中传入参数

lables = ['nvbfge','cvbfg','nfsd','jklibn','dfgrt','muyh','ytug','nghmdf','gfhasfecxv']for lable in lables: print(lable) urls_0 = response.xpath("//map[@name=$val]/area/@href",val=lable).extract() print(urls_0) 原文地址:https://www.cnblogs.com/qiaoe