相关疑难解决方法(0)

如何解决"字符串插值产生可选值的调试描述;你的意思是明确这个吗?" 在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万
查看次数

为什么Swift4会抛出一组UIButton!到[UIButton?]类型?

我今天遇到了一个奇怪的问题.请看这段代码:

class A {

    var button1: UIButton!
    var button2: UIButton!

    func foo() {
        let array = [button1, button2]
    }
}
Run Code Online (Sandbox Code Playgroud)

Xcode说这array[UIButton?]类型.出于某种原因,Swift4将UIButton!元素转换为UIButton?.为什么?

ios swift swift4

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

Swift 3.0字符串连接离开"可选"

从Swift 3.0开始,我对字符串有一些麻烦,尤其是连接.第一个例子是我开始使用Swift来定义我的url字符串时使用的.

internal let host: String! = "https://host.io/"
let urlString = "\(host)oauth/access_token"
Run Code Online (Sandbox Code Playgroud)

其中host被定义为类的开头.这完美地工作直到Swift 3.0,现在打印出来像这样:

Optional("https://host.io/")oauth/access_token
Run Code Online (Sandbox Code Playgroud)

这很奇怪.现在我必须写这个

let urlString = host + "oauth/access_token"
Run Code Online (Sandbox Code Playgroud)

获得预期的输出.

https://host.io/oauth/access_token
Run Code Online (Sandbox Code Playgroud)

另一个 - 我想我和Strings有类似的问题就是这个.我再次连接字符串,但这次我使用+ilke和urlString - 但这次不起作用.代码行如下所示:

self.labelName.text = currentUser.name + " " + String(describing: ageComponents.year)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它产生了这样的字符串:"我的名字可选(26)".在这种情况下,我没有一个解决方案String(describing: ageComponents.year)是不可选的,它不允许我做的事情String(describing: ageComponents.year) ?? "whatever"

有人见过类似的东西?

string string-concatenation swift3 ios10 xcode8

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

在init与之后的隐式解包可选

我想明白为什么ImplicitlyUnwrappedOptional当我这样做时我没有params["bar"] = str得到但是当我params用相同的力量解包变量声明时我得到它.

看下面的游乐场:

import UIKit

var str: String!

str = "Hello"

var params: [String: Any] = [
    "foo": str
]

params["bar"] = str

print(params)

// ["bar": "Hello", "foo": Swift.ImplicitlyUnwrappedOptional<Swift.String>.some("Hello")]
Run Code Online (Sandbox Code Playgroud)

swift swift4

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

在Xcode 8中隐式解包可选赋值

在Xcode 8发布版本中,我发现了一个奇怪的场景.

这是代码,

let implicitlyUnwrappedOptionalString: String! = "implicitlyUnwrappedOptionalString"
let foo = implicitlyUnwrappedOptionalString

print(implicitlyUnwrappedOptionalString)
print(foo)
Run Code Online (Sandbox Code Playgroud)

这是结果:

implicitlyUnwrappedOptionalString
Optional("implicitlyUnwrappedOptionalString")
Run Code Online (Sandbox Code Playgroud)

上面的这些表明,当我将一个隐式展开的可选项分配给一个没有显式类型的变量时,该类型将被推断为一个可选类型,而不是它最初的类型,也就是隐式展开的可选类型.

我的Xcode已更新为8.任何人都可以验证Xcode 7.x中的行为吗?

更改是由于Swift版本更改还是Xcode?

xcode ios swift

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

为什么隐式解包可选不在字典中解包[String:Any]

如果我在我的类中声明了一个隐式解包的可选项,然后我在Dictionary类型中引用[String : Any]它,它就不会被解包.为什么是这样?为什么Any,这不是可选的,不强迫它打开?

var aString: String! = "hello"
var params : [String : Any] = [
    "myString" : aString
]
print(params)
// This prints ["myString": Swift.ImplicitlyUnwrappedOptional<Swift.String>.some("hello")]
Run Code Online (Sandbox Code Playgroud)

请注意,如果我将字典指定为类型[String : String],它将被解包,但这对于我需要多个类型时没有用Dictionary.

swift

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

Swift-structure中的非可选值返回可选值

我在一个ViewController中有一个结构,它有几个非可选成员,如:

struct MyStruct {
    let id: Int64!
    let name: String!
    func checkValues() -> Bool {
        if id == nil || name == nil {
            return false
        } else {
            print("id: \(id) name: \(name)"); return true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在另一个VC(let temp = ViewController.MyStruct(id: 10, name: "Example"))中创建了一个struct实例,并将它传递给我通过Segue创建结构的那个.执行时,temp.checkValues()我得到

id: Optional(10) name: Optional("Example")
Run Code Online (Sandbox Code Playgroud)

从我对(非)选项的理解,我不应该得到Optional()自从我用变量声明!.我弄错了吗?现在我只要在使用它时就加上一个感叹号.我也试过init 在结构中使用,但没有改变任何东西.因为这不是预期的(如果我是对的)我担心我没有得到完整的概念......请告诉我我的代码/我有什么问题.

struct optional swift

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

Swift嵌套的非可选结构给出了可选的

我有以下代码:

struct Product {
    var image: URL!
    var title: String!
    var price: Price!
    var rating: Float!
    var url: URL!
}

struct Price {
    var value: Double!
    var currency: String!  // should be enum
}
Run Code Online (Sandbox Code Playgroud)

我后来初始化了一个Product:

product = Product(
    image: URL(string: "...")!,
    title: "...",
    price: Price(
        value: 5.99,
        currency: "CAD"
    ),
    rating: 4.5,
    url: URL(string: "...")!
)
Run Code Online (Sandbox Code Playgroud)

在运行时期间,product.price类型Price?I发现这很奇怪,因为它是隐式解包的.

我试过给出Price一个init()方法,结果相同.我也试过var price: Price! = Price(value: 0, currency: "CAD")Product定义中使用,结果相同.(我添加了一个成员初始化器Price …

struct optional swift

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