iteatimeteam / Friday-QA

iTeaTime |技术清谈 微信群每周五问答环节
MIT License
229 stars 19 forks source link

iTeaTime(技术清谈)【009期】【代号:梵高星空】 #16

Open ChenYilong opened 5 years ago

ChenYilong commented 5 years ago

iTeaTime(技术清谈)【009期】【代号:梵高星空】


1【问题】请列举至少三种"代码块"管理工具,并介绍你觉得最好用的,以及好用点。 【 难度🌟】【出题人 iTeaTime(技术清谈)@ChenYilong 】


2【问题】【iOS】 iTeaTime(技术清谈)@小橘爷-字节跳动 SKStoreReviewController 这个有什么办法能监听点击的是几颗星呢? 【 难度🌟🌟🌟】【出题人iTeaTime(技术清谈)@小橘爷-字节跳动】

【回答】 iTeaTime(技术清谈)@SAGESSE-深圳-某不知名小作坊: A: SKStoreReviewController的实现如下

@implementation SKStoreReviewController
+ (void)requestReview {
 SKXPCConnection* connection = [[SKXPCConnection alloc] initWithServiceName:@"com.apple.itunesstored.xpc"];

 id arg3 = // <OS_xpc_dictionary: dictionary[0x15fa63bc0]: { refcnt = 1, xrefcnt = 1, count = 1, reply = 0, dest port = 0x0, dest msg id = 0x0, transaction = 0, voucher = 0x0 } <dictionary: 0x15fa63bc0> { count = 1, transaction: 0, voucher = 0x0, contents = "0" => <int64: 0x15fffc060>: 188 }>
 id arg4 = ^{ ... };

 [connection sendMessage:arg3 withReply:arg4];
}
@end 

XPC调用后由StoreKit服务(另一个进程)显示和管理控制器,通过手动创建XPC连接到StoreKit服务使用API或许是个不错的方案,但StoreKit服务是否提供查询功能无从得知。 结论是暂时无法实现


3【问题】【算法】【理财】

假设一个理财产品的平均年化收益为10%,且是收益平稳。

问:每个月固定投入多少钱,分别能在5、10、20、40、50年后得到100万。

如果是到1000万呢?5、10、20、40、50年定投金额金额分别为多少?

要求写出计算代码?

【 难度🌟🌟】【出题人iTeaTime(技术清谈)@消摇-金融-深圳iOS】


4【问题】【算法】【生活】

你看中了一套价值500万的房子,这个时候你有150万的资金,为此,你需要向银行贷款350万。假设目前银行住房贷款利率为5.75%,那么如果你分期30年还,总共需要还多少钱?(提示:每月偿还后,贷款总金额减少,所需利息也会减少)

如果你能通过公积金贷款90万(利率3.25%), 向银行贷款260万,那么你总共需要还多少钱?

【 难度🌟🌟🌟】【出题人iTeaTime(技术清谈)@消摇-金融-深圳iOS】


5【问题】【iOS】 iTeaTime(技术清谈)@十代-小公司-泉州iOS image

【难度🌟】【出题人iTeaTime(技术清谈)@十代-小公司-泉州iOS】

【回答】 iTeaTime(技术清谈)@十代-小公司-泉州iOS:

  1. print 不会被执行, 因为数组是空的, 也不会 crash, 因为逻辑与判断第一个条件的时候就 false
  2. print 不会被执行, 因为数组是空的, 并且会 crash, 因为 logicAnd 函数的第二个参数取值的时候越界了
  3. 使用 closure 将第二个参数延缓执行, 这样就在 guard 的时候就返回 false


 func logicAndRepair(_ left: Bool, _ right: @autoclosure () -> Bool) -> Bool {
    guard left else {
        return false
    }
    return right()
}

if logicAndRepair(!nums.isEmpty, nums[0] > 0) {
    print("The first number \(nums[0]) is greater than zero !")
}


Posted by Posted by 微博@iOS程序犭袁 & 公众号@iTeaTime技术清谈 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

--------------------------------------------

One more thing...

【非礼勿视】以下为彩蛋部分,建议28岁以上男性观看

-------------------------------------------- ![](http://t1.hxzdhn.com/uploads/tu/201904/9999/14770ae19a.jpg)
zhangfurun commented 5 years ago

5【问题】【iOS】 两个都不会打印print,因为num.isEmpty 为false. 第一个不会crash,因为&&在判断前面条件为false时,不会执行后面的判断你条件(& 这个好像会执行) 第二个会crash,因为传参数的时候会先将条件执行

closure解决方案 func logicAdd( left: Bool, right: (() -> (Bool))) -> Bool { guard left else { return false }

return right()

}

var rightClosure = ({ return nums[0] > 0 })

if logicAdd(!nums.isEmpty, rightClosure) { print("结束") } else { print("完蛋了") }

求指导

ChenYilong commented 5 years ago

@zhangfurun 答案已更新