在Xcode 8/Swift 3中获得以下警告:
warning: 'OSAtomicCompareAndSwap32Barrier' was deprecated in OS X 10.12:
Use atomic_compare_exchange_strong() from <stdatomic.h> instead
Run Code Online (Sandbox Code Playgroud)
尝试atomic_compare_exchange_strong在Swift代码中使用函数会导致编译器错误:
error: use of unresolved identifier 'atomic_compare_exchange_strong'
Run Code Online (Sandbox Code Playgroud)
导入Darwin或CoreFoundation模块不能解决问题.
我应该导入什么模块才能获得符号atomic_compare_exchange_strong?
谢谢!
迁移到Swift4后,以下代码引发编译错误:
public final class MediaItemView: NSView {
public override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
// error: 'NSFilenamesPboardType' is unavailable in Swift:
// use 'NSPasteboard.writeObjects(_:)' with file URLs
let draggedTypes: [NSPasteboard.PasteboardType] = [NSFilenamesPboardType]
registerForDraggedTypes(draggedTypes)
}
}
Run Code Online (Sandbox Code Playgroud)
什么是NSFilenamesPboardTypeSwift4 的替代品?如何file name在Swift4中注册拖动类型(在我的情况下是mp3,wav,aiff,...文件)?
谢谢!
无法使用Generic payload对象创建NSNotification的子类.获取运行时错误或编译错误(请参阅下面的代码中的注释).甚至可以使用Swift 2.1吗?任何想法都赞赏.谢谢!
运行时错误,因为NSNotification是抽象类(类集群).
编译错误,因为应该使用指定的初始化程序.
public class Notification<T: Any>: NSNotification {
private var _name: String
private var _object: AnyObject?
private var _payload: T?
public override var name: String {
return _name
}
public override var object: AnyObject? {
return _object
}
public var payload: T? {
return _payload
}
/// Always nil. Use payload
public override var userInfo: [NSObject : AnyObject]? {
return nil
}
/// Change to false to "swap" implementation
#if true
init(name: String, object: …Run Code Online (Sandbox Code Playgroud) 对于使用以下API的音频应用程序中的C++类CARingBuffer,可能有什么好的Swift替换:
CARingBuffer *mBuffer = new CARingBuffer()
mBuffer->Allocate(...)
mBuffer->Store(...)
mBuffer->Fetch(...)
mBuffer->GetTimeBounds(...)
Run Code Online (Sandbox Code Playgroud)
谢谢!
更新:对纯Swift实现感兴趣(没有C/C++桥接).
UDPATE 2:迅速执行允许使用低级别的C API,诸如memcpy,OSAtomicCompareAndSwapLongBarrier等
更新3:让我们假设处理的链接器问题Whole Module Optimization是临时的,并将在较新版本的swift工具链中解决.
更新4:在Swift中实现CARingBuffer并运行性能测试(C++和Swift)后,我得到了一些数字:
2 000 000个周期(2个通道,44100 Hz,每帧512个样本,缓冲容量4096帧)
20 000 000个周期
2亿次循环
我正在寻找迭代器以循环模式无限迭代集合.因此,当达到收集的结束索引时,迭代器应该在start索引处返回元素.
以下解决方案似乎有效,但我希望它可以更好地制作.
public struct LoopIterator<T: Collection>: IteratorProtocol {
private let collection: T
private var startIndexOffset: T.IndexDistance
public init(collection: T) {
self.collection = collection
startIndexOffset = 0
}
public mutating func next() -> T.Iterator.Element? {
guard !collection.isEmpty else {
return nil
}
let index = collection.index(collection.startIndex, offsetBy: startIndexOffset)
startIndexOffset += T.IndexDistance(1)
if startIndexOffset >= collection.count {
startIndexOffset = 0
}
return collection[index]
}
}
extension Array {
func makeLoopIterator() -> LoopIterator<Array> {
return LoopIterator(collection: self)
}
}
// Testing...
// Will …Run Code Online (Sandbox Code Playgroud) 需要你的帮助来理解当从闭包中调用嵌套函数时Swift捕获语义是如何工作的.所以,我有两种方法loadHappinessV1和loadHappinessV2.
在方法中loadHappinessV1:
self未指定,编译器会引发错误:error:在闭包中引用属性'callbackQueue'需要显式的'self'.使捕获语义显式化self.在方法中loadHappinessV2:
为什么在方法loadHappinessV2编译器中不会引发有关捕获语义的错误?是否callbackQueue未捕获嵌套函数(与变量一起)?
谢谢!
import PlaygroundSupport
import Cocoa
PlaygroundPage.current.needsIndefiniteExecution = true
struct Happiness {
final class Net {
enum LoadResult {
case success
case failure
}
private var callbackQueue: DispatchQueue
private lazy var operationQueue = OperationQueue()
init(callbackQueue: DispatchQueue) {
self.callbackQueue = callbackQueue
}
func loadHappinessV1(completion: (LoadResult) -> Void) {
operationQueue.cancelAllOperations()
let hapynessOp = BlockOperation …Run Code Online (Sandbox Code Playgroud) 在Terminal命令中执行pluginkit -m会产生以下输出(跳过不重要的行):
+ com.apple.ncplugin.weather(1.0)
- com.apple.share.SinaWeibo.post(1.0)
H. com.apple.InternalFiltersXPC(2.0)
com.apple.ncplugin.FindMyFriends(1.0)
! com.mycompany.MyDemoPlugIn(1.0)
Run Code Online (Sandbox Code Playgroud)
有一个关于和前缀的答案的SO问题.+-
+ com.mycompany.finderExt(1) - If the extension is enabled
- com.mycompany.finderExt(1) - If the extension is not enabled
Run Code Online (Sandbox Code Playgroud)
但感叹号!和奇怪的前缀H.是什么意思?
什么意思没有前缀?
谢谢!
我正在制作 macOS 单元测试包(服务器软件的集成测试):
xcodebuild -project MyApp.xcodeproj -scheme MyApp.macOS build-for-testing
Run Code Online (Sandbox Code Playgroud)
结果,xcodebuild 生成xctest包MyAppTests.xctest和xctestrun文件MyApp.xctestrun。
现在我可以在 CI 服务器上部署xctest包并执行集成测试(默认情况下针对服务器软件的发布候选版本)。
xcodebuild test-without-building -xctestrun MyApp.xctestrun
Run Code Online (Sandbox Code Playgroud)
现在我想瞄准另一个服务器实例(即来自开发分支)。
为此,我可以提供另一个xctestrun文件MyApp-development.xctestrun,其中包含 key 下的其他设置TestingEnvironmentVariables。
<key>TestingEnvironmentVariables</key>
<dict>
<key>com.myapp.ServerKind</key>
<string>development</string>
...
</dict>
Run Code Online (Sandbox Code Playgroud)
在 CI 服务器上启动:
xcodebuild test-without-building -xctestrun MyApp-development.xctestrun
Run Code Online (Sandbox Code Playgroud)
但维护多个xctestrun文件并不是一个好主意。我想要default xctestrun文件并从命令行覆盖它的设置。
是否可以从命令行传递xctestrun文件中的附加设置(或覆盖现有设置) ?
谢谢你!
代码:
let size = CGSize(width: tabBar.frame.width / CGFloat(TabBarItem.allValues.count),
height: tabBar.frame.height)
let image = UIImage.image(color: Color.action, size: size)
UITabBar.appearance().selectionIndicatorImage = image
Run Code Online (Sandbox Code Playgroud)
在通常的设备上看起来像这样:
在iPhone X上像这样:
iPhone X标签栏项目背景错位的原因是什么?
更新1:
更改代码后,它看起来更好,但它仍然是解决方法,因为图像不完全占据标签栏项目空间:
var image: UIImage
if DeviceInfo.is5p8Inch {
image = UIImage.image(color: Color.action, size: CGSize(width: 4, height: 4))
image = image.resizableImage(withCapInsets: UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2), resizingMode: .tile)
} else {
let size = CGSize(width: tabBar.frame.width / CGFloat(TabBarItem.allValues.count),
height: tabBar.frame.height)
image = UIImage.image(color: Color.action, size: size)
}
Run Code Online (Sandbox Code Playgroud)
更新2:
上面的代码从viewDidLoad(也尝试从 …
FirebaseAuth我在 macOS 上使用。下面的代码按预期工作。它会uid在每次应用程序启动时打印到控制台。
func applicationDidFinishLaunching(_ aNotification: Notification) {
FirebaseApp.configure()
Auth.auth().signInAnonymously { [weak self] result, error in
if let error = error {
debugPrint(error)
}
if let result = result {
debugPrint(result.user.uid)
}
}
}
Run Code Online (Sandbox Code Playgroud)
uid但是,当从currentUser类的属性使用时,Auth系统会弹出对话框,其中显示消息“应用程序想要使用存储在 firebase_auth_1:blah:ios:blah 中的机密信息”。
func applicationDidFinishLaunching(_ aNotification: Notification) {
FirebaseApp.configure()
if let id = Auth.auth().currentUser?.uid {
debugPrint(id) // run `killall -9 SecurityAgent` to kill dialog
} else {
Auth.auth().signInAnonymously { [weak self] result, error in
if let …Run Code Online (Sandbox Code Playgroud) 我们有一个用制成的照片选择器UIImagePickerController。
当进行双龙头(而不是一个 TAP)从图库中的照片。
UIImagePickerController已关闭UIImagePickerController被关闭,并且显示视图控制器也被关闭:: 0是iOS 11错误还是我们需要调整一些内容?
我们的代码:
let vc = UIImagePickerController()
vc.delegate = self
vc.modalPresentationStyle = .overFullScreen
vc.allowsEditing = false
rootVC.present(vc, animated: true) // `rootVC` also presented modally.
Run Code Online (Sandbox Code Playgroud) 我们的软件根本不使用网络.我应该将什么命令行选项传递给./configure脚本以完全禁用CoreWlan supportQt构建?谢谢!
我想观察特定的变化NSManagedObject并相应地更新 UI。
我不想保留引用,NSManagedObject因为它可能随时被删除(即通过远程推送通知的结果)。
目前我正在设置NSFetchRequest并实现这一目标NSFetchedResultsController。NSFetchedResultsControllerDelegate但想要简化这个解决方案(见下文)。
有没有什么简单的方法可以在NSManagedObject不使用 的情况下观察变化NSFetchedResultsControllerDelegate?
谢谢你!
\n\n示例代码 (Xcode Playground)\n
\n\nimport PlaygroundSupport\nimport Cocoa\nimport CoreData\n\nPlaygroundPage.current.needsIndefiniteExecution = true\n\nextension NSManagedObject {\n\n public static var entityName: String {\n let className = String(describing: self)\n return className.components(separatedBy: ".").last!\n }\n\n public convenience init(in context: NSManagedObjectContext) throws {\n let entityName = type(of: self).entityName\n guard let entityDescription = NSEntityDescription.entity(forEntityName: entityName, in: context) else {\n fatalError()\n }\n self.init(entity: …Run Code Online (Sandbox Code Playgroud)