标签: swift3

单例在Swift 3中具有属性

在Apple的使用Swift with Cocoa和Objective-C文档(针对Swift 3更新)中,他们给出了以下Singleton模式的示例:

class Singleton {
    static let sharedInstance: Singleton = {
        let instance = Singleton()

        // setup code

        return instance
    }()
}
Run Code Online (Sandbox Code Playgroud)

让我们假设这个单例需要管理一个可变的字符串数组.如何/在哪里声明该属性并确保它被正确初始化为空[String]数组?

singleton swift3

87
推荐指数
3
解决办法
8万
查看次数

Swift 3 - 比较Date对象

我正在将我的应用程序更新为Swift 3.0语法(我知道它仍处于测试阶段,但我想在发布后立即做好准备).

直到之前的Xcode Beta(Beta 5),我能够Date使用操作数比较两个对象<,>并且==.但在最新的测试版(Beta 6)中,这已不再适用了.以下是一些截图:

在此输入图像描述 在此输入图像描述

正如您在两个屏幕截图中看到的,这些是两个Date对象.但是我收到以下错误: 在此输入图像描述

我究竟做错了什么?这些函数仍然在Date类中声明:

static func >(Date, Date)

如果左手Date比右手Date更晚,则返回true.

这只是一个Beta bug还是我做错了什么?

beta xcode ios swift3

87
推荐指数
8
解决办法
11万
查看次数

往返数据的往返Swift数字类型

由于Swift 3倾向于Data而不是[UInt8],我试图找出最有效/惯用的编码/解码方式将各种数字类型(UInt8,Double,Float,Int64等)作为数据对象.

对于使用[UInt8]这个答案,但它似乎使用了我在Data上找不到的各种指针API.

我想基本上一些自定义扩展看起来像:

let input = 42.13 // implicit Double
let bytes = input.data
let roundtrip = bytes.to(Double) // --> 42.13
Run Code Online (Sandbox Code Playgroud)

真正逃避我的部分,我已经查看了一堆文档,我是如何从任何基本结构(所有数字都是)得到某种指针的东西(OpaquePointer或BufferPointer或UnsafePointer?).在C中,我只是在它前面拍一个&符号,然后就去了.

swift swift3 swift-data

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

等到任务完成

我怎么能让我的代码等到DispatchQueue中的任务完成?它需要任何CompletionHandler或其他东西吗?

func myFunction() {
    var a: Int?

    DispatchQueue.main.async {
        var b: Int = 3
        a = b
    }

    // wait until the task finishes, then print 

    print(a) // - this will contain nil, of course, because it
             // will execute before the code above

}
Run Code Online (Sandbox Code Playgroud)

我正在使用Xcode 8.2并在Swift 3中编写.

multithreading asynchronous grand-central-dispatch swift swift3

80
推荐指数
3
解决办法
8万
查看次数

DispatchQueue.main.async和DispatchQueue.main.sync之间的区别

我一直在使用DispatchQueue.main.async很长一段时间来执行一些与UI相关的操作.但Swift提供了DispatchQueue.main.async和DispatchQueue.main.sync,两者都在主队列中执行.那么有谁可以告诉我他们之间的区别?我什么时候应该使用它们?先感谢您.

DispatchQueue.main.async {
    self.imageView.image = imageView
    self.lbltitle.text = ""

}

DispatchQueue.main.sync {
    self.imageView.image = imageView
    self.lbltitle.text = ""
}
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading ios swift swift3

78
推荐指数
3
解决办法
5万
查看次数

如何解决"字符串插值产生可选值的调试描述;你的意思是明确这个吗?" 在Xcode 8.3 beta?

从beta 8.3开始,zillions警告"字符串插值会为可选值生成调试描述;你的意思是明确说明吗?" 出现在我的代码中.

例如,警告在以下情况下弹出,其中选项可能导致nil:

let msg = "*** Error \(options["taskDescription"]): cannot load \(sUrl) \(error)"
Run Code Online (Sandbox Code Playgroud)

如前所述,我(和编译器)可以将选项插值为'nil'.但是编译器改变了主意.

编译器建议添加一个带有描述的String构造函数,如下所示:

let msg = "*** Error \(String(describing: options["taskDescription"])): cannot load \(sUrl) \(error)"
Run Code Online (Sandbox Code Playgroud)

显然,结果是明确的,但在我看来也非常麻烦.有更好的选择吗?我是否必须修复所有警告或更好等待下一个测试版?

截图用于描述

optional string-interpolation swift swift3

76
推荐指数
7
解决办法
3万
查看次数

更新Swift 3的闭包 - @escaping

我已经将我的代码更新为Xcode 8.0 beta 6,但我似乎陷入了关于新的非转义关闭默认值的问题.在下面的代码中,Xcode建议在下面代码的第一行@escaping前面添加completion:,但是仍然不会编译并进入圆圈.*

(编辑:事实上,@scaping应该在之后 添加completion:,正如Xcode建议的那样.警报可能仍然显示,但清理和编译将删除它.)*如何重新编写/修复此代码以在更新的Swift 3中工作?我看过新手册,但找不到合适的代码示例.

func doSomething(withParameter parameter: Int, completion: () -> ()) {
    // Does something

    callSomeOtherFunc(withCompletion: completion)
  }

// Calling the method and execute closure 
doSomething(withParameter: 2) {
  // do things in closure
}
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢!

xcode closures escaping swift3

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

检查是否启用了位置服务

我一直在做一些关于CoreLocation的研究.最近,我遇到了其他地方已经涉及的问题,但是在Objective C和iOS 8中.

我觉得有点傻傻问这个,但是如何在iOS 9上检查是否使用swift启用了位置服务?

在iOS 7(可能是8?)上你可以使用locationServicesEnabled(),但在编译iOS 9时似乎没有用.

那我怎么做到这一点?

谢谢!

location ios swift ios9 swift3

74
推荐指数
6
解决办法
6万
查看次数

PLBuildVersion类在/ Applications中实现

我为什么要这个?

objc [3993]:类PLBuildVersion在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices(0x112bb0910)中实现和/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices(0x1129da210).将使用两者之一.哪一个未定义.2016-09-15 19:06:45.101896 Fly App [3993:92356]子系统:com.apple.UIKit,类别:HIDEventFiltered,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms :0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2016-09-15 19:06:45.108211 Fly App [3993:92356] subsystem:com.apple.UIKit,category:HIDEventIncoming,enable_level:0,persist_level:0 ,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms:0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2016-09-15 19:06:45.118565 Fly App [3993:92353]子系统:com.apple .BaseBoard,类别:MachPort,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2016-09-15 19:06 :45.153130 Fly App [3993:92250]子系统:com.apple.UIKit,类别:StatusBar,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms:0,enable_ove rsize:1,privacy_setting:2,enable_private_data:0 2016-09-15 19:06:45.537455 Fly App [3993:92250] subsystem:com.apple.BackBoardServices.fence,category:App,enable_level:1,persist_level:0, default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0

有什么理由吗?(直到今天更新后的xcode,并将我的项目更新为swift 3之前从未发生过)

有人可以帮忙吗?

*已编辑*

我不相信开发商给出的建议,所以我一直在寻找答案.我发现一个帖子说这个问题似乎已经被Facebook SDK所取代.但是我还没有在我的项目上安装Facebook SDK(Cocoapod),但是我使用Import Social在Twitter上分享,所以我删除了Import Social并再次运行了我的项目.

这次我没有在调试器上获得相同的输出,而是得到了这个:

2016-09-16 11:57:41.393517 Fly App [1277:48009]子系统:com.apple.UIKit,类别:HIDEventFiltered,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms :0,enable_oversize:1,privacy_setting:2,enable_private_data:0

2016-09-16 11:57:41.396355 Fly App [1277:48009]子系统:com.apple.UIKit,类别:HIDEventIncoming,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms :0,enable_oversize:1,privacy_setting:2,enable_private_data:0

2016-09-16 11:57:41.411055 Fly App [1277:48006]子系统:com.apple.BaseBoard,类别:MachPort,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms :0,enable_oversize:0,privacy_setting:0,enable_private_data:0

2016-09-16 11:57:41.426085 Fly App [1277:47901]子系统:com.apple.UIKit,类别:StatusBar,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms :0,enable_oversize:1,privacy_setting:2,enable_private_data:0

2016-09-16 11:57:41.946193 Fly App [1277:47901]子系统:com.apple.BackBoardServices.fence,类别:App,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0 ,generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0

所以"Class PLBuildVersion在两者中实现"都没有了:

objc [3993]:类PLBuildVersion在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices(0x112bb0910)中实现和/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices(0x1129da210).将使用两者之一.哪一个未定义.

我还是不知道这一切意味着什么.有人找到了解决这个问题的方法吗?

ios swift swift3

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

Swift 3错误的字符串插值与隐式解包的Optionals

为什么在Swift 3中使用字符串插值时,隐式解包的选项不会被解包?

示例:在操场中运行以下代码

var str: String!
str = "Hello"

print("The following should not be printed as an optional: \(str)")
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

The following should not be printed as an optional: Optional("Hello")
Run Code Online (Sandbox Code Playgroud)

当然我可以用+运算符连接字符串,但我在我的应用程序中几乎无处不在使用字符串插值,现在因为这个而无法工作(bug?).

这甚至是一个bug还是他们故意用Swift 3改变这种行为?

string string-interpolation swift swift3

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