Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ChenYilong opened this issue Aug 14, 2019 · 2 comments
Open

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

ChenYilong opened this issue Aug 14, 2019 · 2 comments

Comments

@ChenYilong
Copy link
Member

ChenYilong commented Aug 14, 2019

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岁以上男性观看


@zhangfurun
Copy link

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
Copy link
Member Author

@zhangfurun 答案已更新

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants