我正在尝试创建一个简单的UIBarButtonItem的Swift子类:
class LabelBarButtonItem: UIBarButtonItem {
let label: UILabel
init(text: String) {
self.label = UILabel(frame: CGRectZero)
self.label.tintColor = UIColor.grayColor()
super.init(customView: self.label)
self.label.text = text
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试实例化这个:
let countButton = LabelBarButtonItem(text: "0 items")
Run Code Online (Sandbox Code Playgroud)
代码编译正确但在运行时失败:
fatal error: use of unimplemented initializer 'init()' for class 'TestProject.LabelBarButtonItem'
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么在这种情况下会发生这种情况,或者一般来说是什么原则导致这个问题.在init(text)初始化应直接委托给init(customView)超类.为什么要init()打电话?它不应该涉及.
任何人都可以解释发生了什么吗?当我试图继承其他UIKit类时,会出现类似的问题
我见过一些iPhone应用程序使用自定义图像作为分组UITableView的背景,而不是标准的灰色线条.
这是如何实现的?
我正在努力深入了解Haskell中的懒惰.
我今天想象的是以下片段:
data Image = Image { name :: String, pixels :: String }
image :: String -> IO Image
image path = Image path <$> readFile path
Run Code Online (Sandbox Code Playgroud)
这里的吸引力是我可以简单地创建一个Image实例并传递它; 如果我需要图像数据,它将被懒惰地读取 - 如果不是,将避免读取文件的时间和内存成本:
main = do
image <- image "file"
putStrLn $ length $ pixels image
Run Code Online (Sandbox Code Playgroud)
但它是如何实际工作的?懒惰如何与IO兼容?readFile是否会被调用,无论我是否访问,pixels image或者如果我从未引用它,运行时是否会将该thunk评估为未评估?
如果确实懒惰地读取了图像,那么I/O操作是否可能无序发生?例如,如果在调用后立即image删除文件怎么办?现在,putStrLn调用在尝试读取时将找不到任何内容.
我想setEditing:animated:在一个表视图上调用稍微延迟.通常,我会使用performSelector:withObject:afterDelay:但是
setEditing:animated:是一个原始BOOL - 而不是一个对象在过去,我会在我自己的班级中创建一个虚拟方法setTableAnimated,然后调用,[self performSelector:@selector(setTableAnimated) withObject:nil afterDelay:0.1f但这对我来说感觉很糟糕.
有没有更好的方法呢?
我一直在研究actor模型(特别是Scala中的实现)但我无法理解为什么要求消息没有按特定顺序到达.
似乎至少有一些优雅的,基于actor的并发问题解决方案,只有消息按顺序到达时才会起作用(例如,生产者 - 消费者变体,延迟数据库写入,并发安全缓存).
那么为什么演员的消息没有按顺序到达?它是允许有效实现还是可以防止在订购消息时出现某种死锁?
我有一个iPhone应用程序,我的一些用户在他们的iPad上以仿真模式运行.我们正在考虑创建一个iPad优化的应用程序,它将是App Store中的一个单独的应用程序(更多功能,不同的价格点).
问题是:如果用户在iPad上运行iPhone应用程序然后购买我们的iPad优化版本,他们如何将数据从仅限iPhone的应用程序迁移到新的iPad应用程序中?
以下是我考虑过的一些替代方案:
是否有其他选项可以在同一设备上的两个应用程序之间传输数十兆字节的数据.
是否可以在Play视图中使用Haml(或类似诱惑语言,如Scaml或Jade)?
在Rails中,我能够做类似以下的事情:
respond_to do |format|
format.xml { ... }
format.json { ... }
end
Run Code Online (Sandbox Code Playgroud)
并根据客户端在Accept标头中提供的内容执行相应的块.
我怎么能在Play 2.0(Scala)中做同样的事情?
我希望做一些看起来像这样的事情:
try {
Resources.delete(id)
Ok("done")
}
catch {
case e: ClientReportableException =>
?? match {
case "application/xml" => Ok(<error>{e.message}</error>)
case "application/json" => Ok(...)
}
}
Run Code Online (Sandbox Code Playgroud)
是否有Play成语,或者我只是从请求中获取Accept标头的值?
Swift REPL很棒,但如果我可以从Xcode项目导入类,那就更好了.我尝试切换到我的项目目录并运行
$ swift
> import ProjectName
Run Code Online (Sandbox Code Playgroud)
但我得到了:
error: no such module 'ProjectName'
Run Code Online (Sandbox Code Playgroud)
是否有可能做到这一点?
我的应用程序有一个所有表控制器的公共基类,当我定义该表控制器基类的通用子类时,我遇到了一个奇怪的错误.numberOfSections(in:)当且仅当我的子类是通用的时,才会调用该方法.
以下是我能做的最小的再现:
class BaseTableViewController: UIViewController {
let tableView: UITableView
init(style: UITableViewStyle) {
self.tableView = UITableView(frame: .zero, style: style)
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Overridden methods
override func viewDidLoad() {
super. viewDidLoad()
self.tableView.frame = self.view.bounds
self.tableView.delegate = self
self.tableView.dataSource = self
self.view.addSubview(self.tableView)
}
}
extension BaseTableViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 0
}
func tableView(_ tableView: UITableView, …Run Code Online (Sandbox Code Playgroud) iphone ×3
scala ×3
swift ×3
ios ×2
objective-c ×2
uitableview ×2
actor ×1
background ×1
cocoa ×1
concurrency ×1
generics ×1
haml ×1
haskell ×1
image ×1
initializer ×1
pug ×1
scaml ×1
xcode ×1