When you create a view in code, its IBOutlet properties don't get hooked up properly. You want the version that you get back from dequeueReusableCellWithIdentifier:
let cell = tableView.dequeueReusableCellWithIdentifier("BookCell") as BookTableViewCell