斯威夫特也看起来像支持那样.像这样:
let one = { 1 }/// one: () -> Int
显式类型声明和常量复原函数效果很好.
let one:Int = {let one = {}(1)/// one: Int#!/usr/bin/xcrun swiftvar i:Int = 0let ID = {}(1)/// SourceKitService/// Terminated////// Editor functionality/// temporarily limited.let one = { 1 }}(i)println(ID)
但恒定返回功能不能推断出自己的类型.
let one = { 1 }()
我强迫像shell一样运行它.
// inferred.swift
let one = {lazy var managedobjectContext: NSManagedobjectContext? = { // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that Could cause the creation of the context to fail. let coordinator = self.persistentStoreCoordinator if coordinator == nil { return nil } var managedobjectContext = NSManagedobjectContext() managedobjectContext.persistentStoreCoordinator = coordinator return managedobjectContext}()}(1) // one: (Int) = 1let i = 1 // i: Int = 1let one = { }(i) // one: (Int) = 1
Whemphasized textile silgen closureexpr SIL function @_TF8inferredU_FRSiSi for Expression at [./inferred.swift:4:10 – line:4:15] RangeText=”{ $0 }”
[1] 29364 segmentation fault ./inferred.swift
有什么我错过或做了我有错误的styntax?
解决方法 我相信我已经看到一些东西将Swift的这个构造的实现称为“被称为闭包”,但我现在没有找到它.请注意你的第一个例子:
……不是一个叫做封闭的东西.它定义了一个闭包,但没有调用它.因为它没有参数,所以在通过在大括号后放置一个空参数列表来定义它的同时调用它:
您也可以使用类型推断来执行此 *** 作:
这些对我来说在beta 5上工作,但不是如果我用var而不是let声明. (每当你看到编译器或SourceKit崩溃时,它可能对file a bug有好处.)
被调用的闭包对于设置延迟初始化的存储属性非常有用 – 第一个针对属性的get运行闭包例如,您将在Xcode项目模板中注意到它们用于设置Core Data堆栈:
在这种情况下,必须明确给出类型 – 因为闭包可以返回nil,它的返回类型必须是可选的,但类型检查器不能告诉什么类型的可选.
总结以上是内存溢出为你收集整理的在Swift中输入IIFE的推断全部内容,希望文章能够帮你解决在Swift中输入IIFE的推断所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)