标签: swift4.1

状态栏找不到缓存的时间字符串图像.渲染过程中

升级到Swift4.1和Xcode 9.3之后,我得到了上面的运行时消息.在升级之前,我的控制台窗口中没有此消息.

状态栏找不到缓存的时间字符串图像.渲染过程中.

只要我运行App,每隔几分钟就会出现一次.

它看到我没有负面的副作用,我的应用程序运行,像往常一样,我没有看到任何问题.

我使用标准状态栏,没有改变以任何方式修改它.

问题1:在我尚未遇到的情况下,是否会出现此警告的问题?

问题2:有谁知道如何摆脱这个警告?

ios swift4.1 xcode9.3

112
推荐指数
2
解决办法
4万
查看次数

Xcode 9.3中的Codable'没有初始化器'(Swift 4.1)

更新到Xcode 9.3(使用Swift 4.1)后,发现以下问题:

  1. 创建一个空项目,向其添加一个新的.swift文件并创建两个新类:

    创建为Codable类

    class CodableOne: Codable {
    
        let some: String
    
    }
    
    class CodableTwo: Codable {
    
        var some: String
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

    建立成功

  2. 添加CodableOne类型的新常量CodableTwo:

    为CodableOne添加了一个新常量

    class CodableOne: Codable {
    
        let some: String
        let another: CodableTwo
    
    }
    
    class CodableTwo: Codable {
    
        var some: String
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

    建立成功

  3. 现在将类移动CodableTwo到另一个文件(例如ViewController.swift)

    CodableTwo移动到另一个文件

    构建失败.

现在有一个错误,它不会消失.Codable类不应该需要初始化器(如前面的步骤所示).

关于这背后可能出现的问题及如何解决的任何想法将不胜感激!


PS Code在Xcode 9.2中不存在.也不清理项目/构建路径,重新安装Xcode 9.3也有帮助.

xcode swift codable swift4.1 xcode9.3

37
推荐指数
2
解决办法
3546
查看次数

Swift中flatMap和compactMap的区别

似乎在Swift 4.1 flatMap中已弃用.然而,Swift 4.1中 有一个新方法,compactMap它做同样的事情?有了flatMap你可以集合中变换的每个对象,然后删除在无任何项目.
像flatMap一样

let array = ["1", "2", nil] 
array.flatMap { $0 } // will return "1", "2"
Run Code Online (Sandbox Code Playgroud)

就像compactMap一样

let array = ["1", "2", nil] 
array.compactMap { $0 } // will return "1", "2"
Run Code Online (Sandbox Code Playgroud)

compactMap 正在做同样的事情.

这两种方法有什么区别?为什么Apple决定重命名该方法?

swift swift4 swift4.1

21
推荐指数
2
解决办法
9377
查看次数

Xcode 9.4:意外的服务错误:Xcode构建系统崩溃了

我在Xcode 9.4中构建项目时遇到了奇怪的错误

Build system information - unexpected service error: The Xcode build system has crashed. Please close and reopen your workspace.
Run Code Online (Sandbox Code Playgroud)

附上截图

我尝试了Xcode退出并重新打开但是没有用.有解决方案吗

build-error xcode-workspace ios11 swift4.1 xcode9.4

14
推荐指数
2
解决办法
8591
查看次数

@objc关键字扩展子类行为

有人可以解释为什么@objc这里需要关键字来编译代码吗?

据我所知,这个关键字用于工作ObjC消息方法调度.但这不是一个NSObject例子.

 class MyClass {
 }

 extension MyClass {
     @objc func extensionMethod() { /// THIS LINE
         print("A")
     }
 }

 class SubClass: MyClass {
     override func extensionMethod() {
         print("B")
     }
 }
Run Code Online (Sandbox Code Playgroud)

@objc关键字是否启用消息调度以及dynamic?或不?

swift swift4 swift4.1

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

Swift 在 Objective-C 中的 canImport 模拟

Swift 4.2 有一个特殊的条件canImport,可以帮助开发者检查一个模块是否可以导入到项目中。它是在 Swift 4.1 中引入的。

现在我正在研究用 Objective-C 编写的 iOS 项目。我使用模块,对于每个目标,这些模块都是不同的。这就是为什么我想使用这样的东西:

#if canImport(SomeModule)
@import SomeModule;
#endif
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?现在我为每个目标使用不同的“其他 C 标志”,但我想找到更灵活的解决方案。

module objective-c preprocessor-directive swift4.1

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

为什么compactMap返回nil结果?

请考虑以下代码段:

var a: String? = "abc"
var b: String?

let result = [a, b].compactMap { $0 }
Run Code Online (Sandbox Code Playgroud)

执行后,result将会

["abc"]
Run Code Online (Sandbox Code Playgroud)

这是预期的结果.这里的result(ElementOfResult)元素是String.

print(type(of: result))
Array<String>
Run Code Online (Sandbox Code Playgroud)

现在到了有趣的部分.将代码段更改为

var a: String? = "abc"
var b: Int?

let result = [a, b].compactMap { $0 }
Run Code Online (Sandbox Code Playgroud)

并执行它,result将是

[Optional("abc"), nil]
Run Code Online (Sandbox Code Playgroud)

结果的元件(ElementOfResult)这里是Any这是有意义的,因为Any是的公分母StringInt.

print(type(of: result))
Array<Any>
Run Code Online (Sandbox Code Playgroud)

为什么nil返回的结果compactMap与其定义相矛盾?

来自Apple的compactMap 文档

compactMap(_ :)

返回一个数组,其中包含使用此序列的每个元素调用给定转换的非零结果.

宣言

func compactMap(_ transform:(Self.Element)throws …

swift swift4.1

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

Xcode 9.3中的警告

当我在模拟器中运行我的应用程序时,我在Xcode中收到此警告.我该怎么做才能摆脱它?

objc[6529]: Class VCWeakObjectHolder is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AVConference.framework/Frameworks/ViceroyTrace.framework/ViceroyTrace (0x13490b4d0) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AVConference.framework/AVConference (0x133a37e38). One of the two will be used. Which one is undefined.
Run Code Online (Sandbox Code Playgroud)

在Internet上找不到'Class VCWeakObjectHolder'的单一引用.这让我疯了......虽然这只是一个警告.

更新:Xcode 9.3.1和Xcode 9.4 beta都给出了相同的警告.

在此输入图像描述

swift swift4.1

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

Cast Any中的Cast Any总是在swift4.1中失败

在以前的版本中,为了从[String: Any]字典中获取浮点值,我可以使用let float = dict["somekey"] as? Float,但在swift4.1中,它不起作用.看来类型dict["somekey"]已经隐含推断为Double之前,我得到它,所以从铸造DoubleFloat总是失败.我想知道这是一个新特征还是一个bug.

- 这是更新.

我重新下载了一个Xcode9.2并做了一些实验,现在我想我弄清楚发生了什么.这是测试代码:

let dict: [String : Any] = ["key": 0.1]

if let float: Float = dict["key"] as? Float {
    print(float)
} else {
    print("nil")
}

let dict1: [String : Any] = ["key": NSNumber(value: 0.2)]

if let float: Float = dict1["key"] as? Float {
    print(float)
} else {
    print("nil")
}

let number = NSNumber(value: 0.3)
if let float: Float = number …
Run Code Online (Sandbox Code Playgroud)

downcast swift swift4.1

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

使用 JSONSerialization() 动态计算布尔值

我从服务器(或文件)获取 JSON 字符串。

我想解析那个 JSON 字符串并动态找出每个值类型。

然而,当涉及到布尔值,JSONSerialization只需将值转换为01,并且代码不能区分是否为“0”是一个DoubleIntBool

我想在Bool不明确知道特定键对应于Bool值的情况下识别该值是否为 a 。我做错了什么,或者我可以做些什么不同的事情?

// What currently is happening:
let jsonString = "{\"boolean_key\" : true}"
let jsonData = jsonString.data(using: .utf8)!
let json = try! JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [String:Any]

json["boolean_key"] is Double // true
json["boolean_key"] is Int // true
json["boolean_key"] is Bool // true

// What I would like to happen is below (the issue …
Run Code Online (Sandbox Code Playgroud)

ios swift swift4.1

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