小编mix*_*y87的帖子

如何在Swift中列出符合协议的所有类?

如何列出在Swift中实现给定协议的所有类?

假设我们有一个例子:

protocol Animal {
    func speak()
}

class Cat:Animal {
    func speak() {
        print("meow")
    }
}

class Dog: Animal {
    func speak() {
        print("Av Av!")
    }
}

class Horse: Animal {
    func speak() {
        print("Hurrrr")
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我目前的(不可编译)方法:

func getClassesImplementingProtocol(p: Protocol) -> [AnyClass] {
    let classes = objc_getClassList()
    var ret = [AnyClass]()

    for cls in classes {
        if class_conformsToProtocol(cls, p) {
            ret.append(cls)
        }
    }
    return ret
}

func objc_getClassList() -> [AnyClass] {
    let expectedClassCount = objc_getClassList(nil, 0)
    let allClasses …
Run Code Online (Sandbox Code Playgroud)

reflection ios swift swift2

16
推荐指数
1
解决办法
3458
查看次数

Alamofire - 如何通过分段上传获得进度和完成关闭

我设法使用multipart-form-data Alamofire上传文件:

Alamofire.upload(.POST, "api.myservice.com", headers: myheaders, multipartFormData: { (multipartFormData:MultipartFormData) -> Void in

    multipartFormData.appendBodyPart(data: json, name: "metadata", mimeType: "application/json")
    multipartFormData.appendBodyPart(data: self.data, name: "document", fileName: "photo.png", mimeType: "image/png")

}, encodingMemoryThreshold: 10 * 1024 * 1024) { (result:Manager.MultipartFormDataEncodingResult) -> Void in
}
Run Code Online (Sandbox Code Playgroud)

但我看不到跟踪上传进度的方法,并且在上传完成(或失败)后调用完成块.有没有办法在Alamofire做到这一点?

注意:我知道可以上传进度,但我正在研究多部分表单数据.

multipartform-data alamofire swift2

5
推荐指数
2
解决办法
4260
查看次数

Finder Sync Extension和主应用程序应如何通信?

我的用例:我有一个'MainApp'来执行文件的同步.我希望'MainApp'处理有关同步和其他REST API调用的所有服务器调用,例如文档共享等.

另一方面,我会有一个Finder Sync Extension,它会显示同步状态图标叠加.它还有一个文件上下文菜单项"共享",它将显示一个"共享"对话框,用户可以选择与谁共享文件.

问题:

  1. FinderSyncExtension和MainApp应如何通信?应该使用XCP,如果是,那么通信是双向的吗?例如,MainApp通知Finder它应该刷新,因为一些文件已经同步,Finder通知MainApp它应该执行"共享"操作.

  2. 谁应该出现"分享"对话框?单击FinderSyncExtension"共享"菜单项时,应显示共享表单.这应该由查找程序扩展程序还是由MainApp显示(假设FinderExtension通知它"点击"共享项目).

如果Finder扩展应该显示表单,那么FinderExtension还应该从服务器检索数据(例如联系人和组以进行共享),我不确定Finder Extension是否应该对服务器执行任何网络调用.

研究这个主题,我找到了几种方法:

  1. FinderSyncExtension和MainApp不直接通信.相反,FinderExtension从数据库中读取数据以正确显示徽章.在这种情况下,不清楚FinderExtension在同步完成时应该如何更新,或者它应该如何通知MainApp执行某些操作.
  2. XPC通信.我猜FinderExtension可以启动对MainApp的调用,但预期方向相反?
  3. macOS进程之间是否存在某种NotificationCenter?我试着用NSWorkspace.sharedWorkspace.notificationCenterNSDistributedNotificationCenter.defaultCenter,但他们似乎并不在MainApp交付通知.
  4. 在Seafile项目中的mach_ports?

synchronization xpc nsnotifications findersync

5
推荐指数
1
解决办法
995
查看次数

如何强制finder同步扩展程序刷新可见项目?

我有一个Finder同步扩展程序(FSE),它显示文件的状态。有没有一种方法可以强制FSE再次请求Finder窗口中当前可见的所有文件/文件夹的状态。

findersync

4
推荐指数
1
解决办法
219
查看次数

如何在macOS可可上使用鼠标悬停时突出显示的单元格创建表?

我正在尝试创建一个带有表的托盘弹出式应用程序,该应用程序与Dropbox的弹出式视图中的一个非常相似。有一个文件表,当您将鼠标悬停在表格单元格上时,该单元格将突出显示并显示其他控件。我不确定NSTableView是否完全适合此操作?有人有建议吗?

带高亮显示单元格的Dropbox弹出式表

macos cocoa mouseover nstablecellview

3
推荐指数
1
解决办法
604
查看次数

有没有办法按需重新启动quicklookd?

每当我更新 QuickLook 缩略图/预览生成器时,我都需要等待一分钟才能quicklookd自动重新启动,然后才能看到更改。

$ qlmanage -m
...
generators change detected: quicklookd will restart soon
Run Code Online (Sandbox Code Playgroud)

有没有办法quicklookd手动触发重启,而不必等待它自动重启?

quicklook macos-catalina

3
推荐指数
1
解决办法
4550
查看次数