标签: optional

检查Swift中的可选协议方法会出错吗?

在阅读有关可选协议要求的Apple文档后,它表示您可以使用可选链接来检查实现.我尝试了这个,我一直收到错误.看起来这不再是这样做的有效方式,我试图找出现在是否有新的方法来做到这一点.

这是一个例子,你可以看到错误:http ://swiftstub.com/743693493/
这是我的代码:

@objc protocol Bearable {
    func growl()
    optional func cough() -> String //Apparently bears cough when they are scared. 
}

@objc class Bear:Bearable {
    var name = "Black Bear"
    func growl() {
        println("Growllll!!!")
    }
}

@objc class Forest {
    var bear:Bear?
    func scareBears() {
        if let cough = bear?.cough?() {
            println(cough)      
        } else {
            println("bear was scared")  
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误: error: 'Bear' does not have a member named 'cough' if let cough = bear?.cough?() …

protocols optional swift

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

可选链接返回Int

这是我如何返回表视图的行数:

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let dataCount = self.data?.count {
        return dataCount
    } else {
        return 0
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想使用可选链接使其更简洁......但编译器对我的代码不满意.我试试这个:

return self.data?.count
Run Code Online (Sandbox Code Playgroud)

并且它抱怨计数是Int类型?我应该强行打开它,所以我这样做:

return self.data?.count!
Run Code Online (Sandbox Code Playgroud)

并且它抱怨count是Int类型.使用可选链接,如果数据不是nil,它应该只得到计数,如果数组不是nil,那么我知道count将返回ok.

我错过了什么?谢谢

optional ios swift optional-chaining

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

为什么guava/java使用possible.isPresent()而不是Optional.isPresent(可能)?

https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained上,解释了guava(以及后来的java 8)添加了一个通用类Optional以清除空检查.

如果函数返回Optional,则需要调用者在使用之前解包该字符串.

这通常是在表格中完成的

Optional<String> possible = returnAnAbsentOptional();
if(possible.isPresent()){
    System.out.println(possible.get())
}
Run Code Online (Sandbox Code Playgroud)

如果returnAnAbsentOptional返回null,我们又重新开始NPE.

我的问题是,为什么Guava/Java使用possible.isPresent()而不是Optional.isPresent(可能),它可以相应地对null值做出反应?

java optional guava

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

函数返回可选("字符串")

我有这个函数接受Double值,将其转换为货币格式并返回格式为R $的字符串:1.200,30.

func convert_Value(valor: Double) ->String {
    let formatter = NSNumberFormatter()
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    formatter.locale = NSLocale(localeIdentifier: "pt_BR")
    return ("\(formatter.stringFromNumber(valor))")
}
Run Code Online (Sandbox Code Playgroud)

此函数没有声明任何可选变量,但是当我使用以下方法调用它时:

x = convert_Value(1200.30)
Run Code Online (Sandbox Code Playgroud)

它返回:

Optional("R$1.200,30")
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚我需要做什么,因为它不是可选的我不能使用惊叹号打开可选项.我试图将函数中的Double和String参数转换为Optional,然后解包,但可选的stills显示.

optional swift

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

as!,init是什么意思?迅速地?

有时,当我使用“ as”时,xcode提示失败并建议更改为“ as!”。此外,我还看到一些委托人是“ init?”。我知道某些变量可以被定义为可选变量。 ?

我用“快速编程语言”查询了问题,但没有找到答案。

optional swift

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

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
查看次数

可选地将类型转换映射到子类对象

我正在尝试编写以下代码,其中C是子类B.并且getValue方法仅在C,而不是在B.但Eclipse在此声明中显示错误:

Optional.ofNullable(A).map(A::getB).map(C::getValue);
Run Code Online (Sandbox Code Playgroud)

如果是正常情况,我们将输入类似的转换和写入((C)a.getB()).getValue().我怎么写一个相同的Optional

java optional java-8

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

即使Optional包含值,也会调用Optional.orElse的参数

下面的代码打印:

should Not have called
hello world
Run Code Online (Sandbox Code Playgroud)

为什么orElse即使有包含值的Optional也要执行?

public static void main(String[] args){
    String o = Optional.ofNullable("world").map(str -> "hello" + str).orElse(dontCallMe());
    System.out.println(o);
}

private static String dontCallMe() {
    System.out.println("should Not have called");
    return "why god why";
}
Run Code Online (Sandbox Code Playgroud)

java optional java-8

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

为什么Kotlin中的选项需要显式初始化?

在类中定义可选属性时,Kotlin要求将其显式初始化为null,如下所示:

var myString: String? = null
Run Code Online (Sandbox Code Playgroud)

有没有理由说编译器无法推断出这个初始值?我相信Swift会让你跳过这= null部分,但这是Kotlin中的编译器错误.在编写以下内容后自动将值null设置为null会不会更简单?

var myString: String?
Run Code Online (Sandbox Code Playgroud)

optional kotlin

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

使用Stream.ofNullable处理可为空的列表是否是错误的做法

正确使用可选内容的第12项不是可选商品状态

有时,我们倾向于“过度使用”事物。这意味着我们拥有诸如Optional之类的东西,并且到处都可以看到用例。在Optional的情况下,一种常见的情况是将其方法链接起来以达到获得价值的单一目的。避免这种做法,而是依靠简单明了的代码。

这是真的Stream.ofNullable吗?我应该避免这种情况:

Stream.ofNullable(getHandlers(...))
   .flatMap(Collections::stream)
   .forEach(handler -> handler.handle(event));
Run Code Online (Sandbox Code Playgroud)

赞成吗?

List<Handler> handlers = getHandlers(...) 

if (handlers == null) {
    return; // do nothing
}

handlers.forEach(handler -> handler.handle(event));
Run Code Online (Sandbox Code Playgroud)

java optional java-stream

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