我试图排序尺寸亿的阵列中的Swift和Kotlin,我可以看到它们之间的巨大的性能差距.对于这个数字,Kotlin几乎18快Swift(在我的机器上).
我记录了一些结果,我发现当尺寸大约为10000或更小时swift更快但是一旦数量增加,Swift与之相比变得非常慢Kotlin.
Swift和Kotlin的代码如下,
迅速
let n = 100000000
var arr = Array(repeating: 0, count: n)
for i in 1...n {
arr[i-1] = Int(arc4random_uniform(UInt32(n)))
}
//Record time before sort
arr.sort()
//Record time after sort
Run Code Online (Sandbox Code Playgroud)
科特林
val n = 100000000
val arr = IntArray(n)
for (i in 1..n) {
arr[i-1] = Random().nextInt(n)
}
//Record time before sort
arr.sort()
//Record time after sort
Run Code Online (Sandbox Code Playgroud)
两者记录的时间如下,
迅速
Size: 1000 Time: 0.001 …Run Code Online (Sandbox Code Playgroud) 我有一个UITextField zipTextField并用于UIPicker更改文本。我想知道zipTextField 何时更改。
我把这个程序放在我的 ViewController
@IBAction func textFieldEditingDidChange(sender: AnyObject){
print("textField:\(zipTextField.text)")
}
Run Code Online (Sandbox Code Playgroud)
但是当zipTextField改变时函数没有调用
否则,当我连接textFieldEditingDidChange到Editing Did End或Editing Did Begin 时, 将调用textFieldEditingDidChange
在3x3矩阵表示中,我可以找到两个对角线的总和,其中一个衬垫Swift如下,
let array = [
[1, 2, 3],
[4, 5, 6],
[-7, 8, 9]
]
let d1 = array.enumerated().map({ $1[$0] }).reduce(0, +)
let d2 = array.reversed().enumerated().map({ $1[$0] }).reduce(0, +)
print(d1) // prints 15
print(d2) // prints 1
Run Code Online (Sandbox Code Playgroud)
我能找到map和reduce当量Kotlin为flatMap和fold,但未能找到enumerated.
我们如何才能实现与更高阶函数类似Kotlin?
现在我收到错误:警告:尝试在 CollectionViewController 上呈现 UIAlertController:0x7f9af9016200:0x7f9af750d620 已经呈现(空)
有没有办法快速堆叠警报?有我的代码,如果项目发布时间超过一天,它会显示警报。我尝试过两种方法但没有成功。
任何解决方案如何管理做到这一点?
for p in json! {
if self.checkDaysPassed(postDate: p["uploadedTime"] as! String) > 1 {
print("more than one day passed, sell item?")
let alert = UIAlertController(title: "Sell this item", message: "This item has been unused for a day", preferredStyle: .alert)
alert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
alert.addAction(UIAlertAction(title: "Yes", style: .default){ (action) in
print("pressed yes")
})
alert.addAction(UIAlertAction(title: "No", style: .cancel){ (action) in
print("pressed no")
})
self.present(alert, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud) 最近我加入Codable了一个项目并JSON从符合Encodable我的类型中获取一个对象,我想出了这个扩展,
extension Encodable {
/// Converting object to postable JSON
func toJSON(_ encoder: JSONEncoder = JSONEncoder()) -> [String: Any] {
guard let data = try? encoder.encode(self),
let object = try? JSONSerialization.jsonObject(with: data, options: .allowFragments),
let json = object as? [String: Any] else { return [:] }
return json
}
}
Run Code Online (Sandbox Code Playgroud)
这很有效,但有没有更好的方法来实现同样的目标?
我在ViewController上面添加tabBar这样的
cardViewController = storyboard?.instantiateViewController(withIdentifier: "CardViewController") as? CardViewController
addChildViewController(cardViewController)
cardViewController.didMove(toParentViewController: self)
view.addSubview(cardViewController.view)
cardViewController.view.frame = CGRect(x: 0, y: view.frame.height - cardHandlAreaHight - tabBarHight,
width: view.bounds.width, height: cardHight)
cardViewController.view.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)
我得到的 tabBar 的大小是这样的:
tabBarHight = tabBarController?.tabBar.frame.size.height
Run Code Online (Sandbox Code Playgroud)
这适用于所有 iPhone 但不适用于 iPhone X 如何解决这个问题?