gpt4 book ai didi

ios - 在 Swift 中为特定方法调用实现闭包

转载 作者:行者123 更新时间:2023-11-28 13:22:13 24 4
gpt4 key购买 nike

我遇到了以下 UITableViewController 代码,并想实现相关的 classes 和它们附带的函数,以便我更多地了解 Swift。

我不确定 api.getRooms() 的实现是什么样的。我认为它可能会关闭,但我不完全确定?

我的问题是,考虑到 {} 的用法,api.getRooms() 会返回什么?如果有人能向我解释发生了什么,将不胜感激。

api.getRooms(User.currentUser()!) { (roomsObj, error) in
if let rooms = roomsObj as? Array<Room> {
self.rooms = rooms
self.tableView.reloadData()
if (viaPullToRefresh) {
self.refreshControl.endRefreshing()
}
}
}

PullViewController.swift

class PullViewController: UITableViewController {
var rooms = Array<Room>()

init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)

// Custom initialization
assert(User.currentUser())
}

override func viewDidLoad() {
self.refreshControl = UIRefreshControl()
self.refreshControl.addTarget(self, action: Selector("refreshInvoked"), forControlEvents: UIControlEvents.ValueChanged)
refresh()
}

override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return rooms.count
}

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!) -> UITableViewCell! {
var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("Cell") as? UITableViewCell
if !cell {
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier:"Cell")
}

let room = rooms[indexPath.row]
cell!.textLabel.textColor = UIColor.blackColor()
cell!.textLabel.text = "\(room.name)(\(room.messageCount))"
return cell
}

func refreshInvoked() {
refresh(viaPullToRefresh: true)
}

func refresh(viaPullToRefresh: Bool = false) {
let api = API()
api.getRooms(User.currentUser()!) { (roomsObj, error) in
if let rooms = roomsObj as? Array<Room> {
self.rooms = rooms
self.tableView.reloadData()
if (viaPullToRefresh) {
self.refreshControl.endRefreshing()
}
}
}
}
}

User.swift

class User {

init() {
}

class func currentUser() -> Bool {
return true
}
}

Room.swift

class Room {

var name: String
var messageCount: Int

init() {
}
}

API.swift (不确定这是否正确实现)。

class API {

init() {
}

func getRooms(user: User) -> (Array<Room>, String) { // ??
// ??
}
}

最佳答案

在你的房间类中,你没有初始化 name 和 message count 变量,在 swift 中只有可选变量可以是 nil

class Room {

var name: String
var messageCount: Int

init(name:String, messageCount:Int) {
self.name = name
self.messageCount = messageCount
}
}

还断言需要评估 bool 值

assert(User.currentUser() != nil)

关于ios - 在 Swift 中为特定方法调用实现闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com