class TimelineTableViewController: UITableViewController {
var tweets: [Tweet] = []
func tableView(tableView: UITableView, numberOfRowsInSection
section: Int) -> Int {
return tweets.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath
indexPath: NSIndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
class TimelineTableViewController: UITableViewController {
private let timelineDataSource = TimelineDataSource()
private let timelineDelegate = TimelineDelegate()
override func viewDidLoad() {
tableView.dataSource = timelineDataSource
tableView.delegate = timelineDelegate

}
class TimelineDataSource: NSObject, UITableViewDataSource {
var tweets: [Tweet] = []
func tableView(tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
return tweets.count
}
import UIKit
class KobitoSettingViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, KobitoCollectionViewCellDelegate {
var delegate: BackDelegate?
@IBOutlet weak var kobitoMediumImageView: UIImageView!
@IBOutlet weak var kobitoNameLabel: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var backButton: UIButton!
@IBOutlet weak var gotchaButton: UIButton!
var isShowedKobitoDetailView = false
var currentSelectedIndex: Int {
return KobitoManager.sharedManager.currentKobito.type.rawValue
}
override func viewDidLoad() {
backButton.imageView?.contentMode = .ScaleAspectFit
gotchaButton.imageView?.contentMode = .ScaleAspectFit
kobitoMediumImageView.image = KobitoManager.sharedManager.currentKobito.type.miniImage
kobitoNameLabel.text = KobitoManager.sharedManager.currentKobito.type.name
automaticallyAdjustsScrollViewInsets = false
var cellSide:CGFloat = 0
var lrMargin:CGFloat = 0
var tbMargin:CGFloat = 0
// これはした方がいいかも.
if collectionView.frame.height/2 < collectionView.frame.width/3 {
tbMargin = 4
cellSide = (collectionView.frame.size.height - (tbMargin * 4)) / 2
lrMargin = (collectionView.frame.size.width - (cellSide * 3)) / 6
}else {
lrMargin = 2
cellSide = (collectionView.frame.size.width - (lrMargin * 6)) / 3
tbMargin = (collectionView.frame.size.height - (cellSide * 2)) / 4
}
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: cellSide, height: cellSide)
layout.sectionInset = UIEdgeInsets(top: tbMargin, left: lrMargin, bottom: tbMargin, right: lrMargin)
collectionView.collectionViewLayout = layout
collectionView.delegate = self
collectionView.dataSource = self
}
override func viewDidAppear(animated: Bool) {
showCurrentSelectedMark()
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 12
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 6
}
class Timeline {
private var tweets: [Tweet] = []
init(tweets: [Tweet]) {
self.tweets = tweets
}
var numberOfTweet: Int {
return tweets.count
}
subscript(index: Int) -> Tweet {
return tweets[index]
}
private func insertTweetAtIndex(tweet: Tweet, index: Int) {
tweets.insert(tweet, atIndex: index)
}
class TimelineDataSource: NSObject, UITableViewDataSource {
var timeline: Timeline = Timeline(tweets: [])
func tableView(tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
return timeline.numberOfTweet
}
struct Timeline {
private var tweets: [Tweet] = []
init(tweets: [Tweet]) {
self.tweets = tweets
}
var numberOfTweet: Int {
return tweets.count
}
subscript(index: Int) -> Tweet {
return tweets[index]
}
private func insertTweetAtIndex(tweet: Tweet, index: Int) -> Timeline {
var mutableTweets = tweets
mutableTweets.insert(tweet, atIndex: index)
return Timeline(tweets: mutableTweets)
}
func favoriteTweetAtIndex(index: Int) -> Timeline {
let cacheTweet = items[index]
let tweet = Tweet(
id: cacheTweet.id,
text: cacheTweet.text,
favorited: !cacheTweet.favorited,
retweeted: cacheTweet.retweeted,
user: cacheTweet.user)
return deleteItemAtIndex(index).insertItemAtIndex(tweet, index: index)
}
private func insertTweetAtIndex(tweet: Tweet, index: Int) -> Timeline {
var mutableTweets = tweets
mutableTweets.insert(tweet, atIndex: index)
return Timeline(tweets: mutableTweets)
}
private func insertItemAtIndex(item: Item, index: Int) -> Timeline {
var mutableItems = Items
mutableItems.insert(item, atIndex: index)
return Timeline(tweets: mutableItems)
}
protocol DataType {
associatedtype ItemType
var items: [ItemType] { get }
var numberOfItems: Int { get }
subscript(index: Int) -> ItemType { get }
func insertItemAtIndex(item: ItemType, index: Int) -> Self
func deleteItemAtIndex(index: Int) -> Self
}
protocol DataType {
associatedtype ItemType
var items: [ItemType] { get }
var numberOfItems: Int { get }
subscript(index: Int) -> ItemType { get }
func insertItemAtIndex(item: ItemType, index: Int) -> Self
func deleteItemAtIndex(index: Int) -> Self
}
protocol DataType {
associatedtype ItemType
var items: [ItemType] { get }
var numberOfItems: Int { get }
subscript(index: Int) -> ItemType { get }
func insertItemAtIndex(item: ItemType, index: Int) -> Self
func deleteItemAtIndex(index: Int) -> Self
}
protocol DataType {
associatedtype ItemType
var items: [ItemType] { get }
var numberOfItems: Int { get }
subscript(index: Int) -> ItemType { get }
func insertItemAtIndex(item: ItemType, index: Int) -> Self
func deleteItemAtIndex(index: Int) -> Self
}
struct Timeline: DataType {
typealias ItemType = Tweet
var items: [ItemType] = []
init(items: [ItemType]) {
self.items = items
}
var numberOfItems: Int {
return items.count
}
subscript(index: Int) -> Tweet {
return items[index]
}
func insertItemAtIndex(item: ItemType, index: Int) -> Timeline {
var mutableItems = items
mutableItems.insert(item, atIndex: index)
return Timeline(items: mutableItems)
}
func favoriteTweetAtIndex(index: Int) -> Timeline {
let cacheTweet = items[index]
let tweet = Tweet(
id: cacheTweet.id,
text: cacheTweet.text,
favorited: !cacheTweet.favorited,
retweeted: cacheTweet.retweeted,
user: cacheTweet.user)
return deleteItemAtIndex(index).insertItemAtIndex(tweet, index: index)
}










_人人人人人人_
> xcode圧力 <
 ̄Y^Y^Y^Y^Y ̄




















💪














Blending Culture in Twitter Client

Blending Culture in Twitter Client

  • 4.
  • 9.
  • 18.
  • 23.
    class TimelineTableViewController: UITableViewController{ var tweets: [Tweet] = [] func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tweets.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { return UITableViewCell() } }
  • 24.
    class TimelineTableViewController: UITableViewController{ private let timelineDataSource = TimelineDataSource() private let timelineDelegate = TimelineDelegate() override func viewDidLoad() { tableView.dataSource = timelineDataSource tableView.delegate = timelineDelegate
 }
  • 25.
    class TimelineDataSource: NSObject,UITableViewDataSource { var tweets: [Tweet] = [] func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tweets.count }
  • 26.
    import UIKit class KobitoSettingViewController:UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, KobitoCollectionViewCellDelegate { var delegate: BackDelegate? @IBOutlet weak var kobitoMediumImageView: UIImageView! @IBOutlet weak var kobitoNameLabel: UILabel! @IBOutlet weak var collectionView: UICollectionView! @IBOutlet weak var backButton: UIButton! @IBOutlet weak var gotchaButton: UIButton! var isShowedKobitoDetailView = false var currentSelectedIndex: Int { return KobitoManager.sharedManager.currentKobito.type.rawValue } override func viewDidLoad() { backButton.imageView?.contentMode = .ScaleAspectFit gotchaButton.imageView?.contentMode = .ScaleAspectFit kobitoMediumImageView.image = KobitoManager.sharedManager.currentKobito.type.miniImage kobitoNameLabel.text = KobitoManager.sharedManager.currentKobito.type.name automaticallyAdjustsScrollViewInsets = false var cellSide:CGFloat = 0 var lrMargin:CGFloat = 0 var tbMargin:CGFloat = 0 // これはした方がいいかも. if collectionView.frame.height/2 < collectionView.frame.width/3 { tbMargin = 4 cellSide = (collectionView.frame.size.height - (tbMargin * 4)) / 2 lrMargin = (collectionView.frame.size.width - (cellSide * 3)) / 6 }else { lrMargin = 2 cellSide = (collectionView.frame.size.width - (lrMargin * 6)) / 3 tbMargin = (collectionView.frame.size.height - (cellSide * 2)) / 4 } let layout = UICollectionViewFlowLayout() layout.itemSize = CGSize(width: cellSide, height: cellSide) layout.sectionInset = UIEdgeInsets(top: tbMargin, left: lrMargin, bottom: tbMargin, right: lrMargin) collectionView.collectionViewLayout = layout collectionView.delegate = self collectionView.dataSource = self } override func viewDidAppear(animated: Bool) { showCurrentSelectedMark() } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { return 12 } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { return 0 } func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { return 1 } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 6 }
  • 32.
    class Timeline { privatevar tweets: [Tweet] = [] init(tweets: [Tweet]) { self.tweets = tweets } var numberOfTweet: Int { return tweets.count } subscript(index: Int) -> Tweet { return tweets[index] } private func insertTweetAtIndex(tweet: Tweet, index: Int) { tweets.insert(tweet, atIndex: index) }
  • 33.
    class TimelineDataSource: NSObject,UITableViewDataSource { var timeline: Timeline = Timeline(tweets: []) func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return timeline.numberOfTweet }
  • 36.
    struct Timeline { privatevar tweets: [Tweet] = [] init(tweets: [Tweet]) { self.tweets = tweets } var numberOfTweet: Int { return tweets.count } subscript(index: Int) -> Tweet { return tweets[index] }
  • 37.
    private func insertTweetAtIndex(tweet:Tweet, index: Int) -> Timeline { var mutableTweets = tweets mutableTweets.insert(tweet, atIndex: index) return Timeline(tweets: mutableTweets) }
  • 38.
    func favoriteTweetAtIndex(index: Int)-> Timeline { let cacheTweet = items[index] let tweet = Tweet( id: cacheTweet.id, text: cacheTweet.text, favorited: !cacheTweet.favorited, retweeted: cacheTweet.retweeted, user: cacheTweet.user) return deleteItemAtIndex(index).insertItemAtIndex(tweet, index: index) }
  • 41.
    private func insertTweetAtIndex(tweet:Tweet, index: Int) -> Timeline { var mutableTweets = tweets mutableTweets.insert(tweet, atIndex: index) return Timeline(tweets: mutableTweets) }
  • 42.
    private func insertItemAtIndex(item:Item, index: Int) -> Timeline { var mutableItems = Items mutableItems.insert(item, atIndex: index) return Timeline(tweets: mutableItems) }
  • 43.
    protocol DataType { associatedtypeItemType var items: [ItemType] { get } var numberOfItems: Int { get } subscript(index: Int) -> ItemType { get } func insertItemAtIndex(item: ItemType, index: Int) -> Self func deleteItemAtIndex(index: Int) -> Self }
  • 44.
    protocol DataType { associatedtypeItemType var items: [ItemType] { get } var numberOfItems: Int { get } subscript(index: Int) -> ItemType { get } func insertItemAtIndex(item: ItemType, index: Int) -> Self func deleteItemAtIndex(index: Int) -> Self }
  • 45.
    protocol DataType { associatedtypeItemType var items: [ItemType] { get } var numberOfItems: Int { get } subscript(index: Int) -> ItemType { get } func insertItemAtIndex(item: ItemType, index: Int) -> Self func deleteItemAtIndex(index: Int) -> Self }
  • 46.
    protocol DataType { associatedtypeItemType var items: [ItemType] { get } var numberOfItems: Int { get } subscript(index: Int) -> ItemType { get } func insertItemAtIndex(item: ItemType, index: Int) -> Self func deleteItemAtIndex(index: Int) -> Self }
  • 47.
    struct Timeline: DataType{ typealias ItemType = Tweet var items: [ItemType] = [] init(items: [ItemType]) { self.items = items } var numberOfItems: Int { return items.count } subscript(index: Int) -> Tweet { return items[index] } func insertItemAtIndex(item: ItemType, index: Int) -> Timeline { var mutableItems = items mutableItems.insert(item, atIndex: index) return Timeline(items: mutableItems) }
  • 48.
    func favoriteTweetAtIndex(index: Int)-> Timeline { let cacheTweet = items[index] let tweet = Tweet( id: cacheTweet.id, text: cacheTweet.text, favorited: !cacheTweet.favorited, retweeted: cacheTweet.retweeted, user: cacheTweet.user) return deleteItemAtIndex(index).insertItemAtIndex(tweet, index: index) }
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.