小编Vla*_*lad的帖子

Swift 3:atomic_compare_exchange_strong

在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)

导入DarwinCoreFoundation模块不能解决问题.

我应该导入什么模块才能获得符号atomic_compare_exchange_strong

谢谢!

atomic swift

14
推荐指数
1
解决办法
1990
查看次数

Swift 4:NSFilenamesPboardType不可用.使用什么代替registerForDraggedTypes?

迁移到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,...文件)?

谢谢!

macos cocoa drag-and-drop swift swift4

13
推荐指数
4
解决办法
4040
查看次数

NSNotification子类与Swift 2.1中的Generics

无法使用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)

generics nsnotificationcenter swift

7
推荐指数
1
解决办法
385
查看次数

CARingBuffer替代Swift

对于使用以下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帧)

  • C++:0.48s
  • 斯威夫特:0.58秒(慢1.208)

20 000 000个周期

  • C++:4.8s
  • 斯威夫特:6.3s(慢1.313)

2亿次循环

  • C++:47.43s
  • 斯威夫特:58.13秒(慢1.226)

core-audio ios swift

7
推荐指数
0
解决办法
253
查看次数

自定义迭代器以循环模式无限迭代集合

我正在寻找迭代器以循环模式无限迭代集合.因此,当达到收集的结束索引时,迭代器应该在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)

collections iterator infinite-loop swift

7
推荐指数
2
解决办法
900
查看次数

Swift:从闭包调用嵌套函数时捕获语义.为什么编译器不会引发错误?

需要你的帮助来理解当从闭包中调用嵌套函数时Swift捕获语义是如何工作的.所以,我有两种方法loadHappinessV1loadHappinessV2.

在方法中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)

swift

7
推荐指数
2
解决办法
786
查看次数

OS X'pluginkit --match'命令输出结果前缀为"+, - ,!".这是什么意思?

在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 plugins

6
推荐指数
1
解决办法
1150
查看次数

xcodebuild 测试无需构建。如何从命令行覆盖测试运行参数

我正在制作 macOS 单元测试包(服务器软件的集成测试):

xcodebuild -project MyApp.xcodeproj -scheme MyApp.macOS build-for-testing
Run Code Online (Sandbox Code Playgroud)

结果,xcodebuild 生成xctestMyAppTests.xctestxctestrun文件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文件中的附加设置(或覆盖现有设置) ?

谢谢你!

macos xcodebuild

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

UITabBarItem背景由UITabBar.appearance()设置.selectionIndicatorImage在iPhone X上未对齐

代码:

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(也尝试从 …

ios swift iphone-x

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

Firebase macOS:为什么使用 Auth.auth().currentUser 会导致 SecurityAgent 对话框弹出,而使用 Auth.auth().signInAnonymously 则不会

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)

firebase swift firebase-authentication

5
推荐指数
0
解决办法
335
查看次数

iOS 11双击图像可关闭UIImagePickerController和演示者视图控制器

我们有一个用制成的照片选择器UIImagePickerController

当进行龙头(而不是一个 TAP)从图库中的照片。

  • 在iOS 10上:UIImagePickerController已关闭
  • 在iOS 11上: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)

ios swift ios11

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

问:关闭构建中的'CoreWlan支持'

我们的软件根本不使用网络.我应该将什么命令行选项传递给./configure脚本以完全禁用CoreWlan supportQt构建?谢谢!

macos qt

2
推荐指数
1
解决办法
1127
查看次数

CoreData:当 NSManagedObject 更改时收到通知,而不保留对 NSManagedObject 的引用

我想观察特定的变化NSManagedObject并相应地更新 UI。

\n\n

不想保留引用,NSManagedObject因为它可能随时被删除(即通过远程推送通知的结果)。

\n\n

目前我正在设置NSFetchRequest并实现这一目标NSFetchedResultsControllerNSFetchedResultsControllerDelegate但想要简化这个解决方案(见下文)。

\n\n

有没有什么简单的方法可以在NSManagedObject不使用 的情况下观察变化NSFetchedResultsControllerDelegate

\n\n

谢谢你!

\n\n

示例代码 (Xcode Playground)\n

\n\n
import 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)

macos core-data ios

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