编译器错误Closure use of non-escaping parameter 'completion' may allow it to escape,这是有道理的,因为它将在函数返回后调用.
func sync(completion:(()->())) {
self.remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) { (status, error) -> Void in
completion()
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我使闭包可选,那么没有编译错误,为什么呢?函数返回后仍然可以调用闭包.
func sync(completion:(()->())?) {
self.remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) { (status, error) -> Void in
completion?()
}
}
Run Code Online (Sandbox Code Playgroud) 我只是将手机升级到iOS 10.2.1.
在我的Swift应用程序(使用3.0)中,我正在尝试检查手机上是否安装了Google地图.如果是,请在Google地图中打开此地址.
UIApplication.shared.canOpenURL(NSURL(string:"comgooglemaps://")! as URL)
Run Code Online (Sandbox Code Playgroud)
即使我安装了Google地图,表达式的计算结果为false.
奇怪的是,我可以用Swift打开谷歌地图
UIApplication.shared.open(NSURL(string:
"comgooglemaps://?saddr=&daddr=\(lat),\(lon)&directionsmode=driving")! as URL, options: [:], completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
iOS 10.2.1中是否存在某种更改,导致第一个表达式无法评估为真?
网址似乎相同(comgooglemaps)
现在在plist中是否需要一些东西?
要转换日期和时间,我使用了这个:
let formatter = NSDateFormatter()
formatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat = "M/dd/yyyy, h:mm"
formatter.AMSymbol = "AM"
formatter.PMSymbol = "PM"
let dateString = formatter.stringFromDate(model.courseDate)
print(dateString)
Run Code Online (Sandbox Code Playgroud)
如果课程日期为"courseDate ="2017-01-09 01:00:00 +0000";" 但我打印出来的情况如下: 2017年1月1日,1点没有任何上午或下午.
我怎样才能做到这一点?
谢谢.
例如,给定以下字符串:
let textEN = "The quick brown fox jumps over the lazy dog"
let textES = "El zorro marrón rápido salta sobre el perro perezoso"
let textAR = "?????? ????? ?????? ???? ??? ????? ??????"
let textDE = "Der schnelle braune Fuchs springt über den faulen Hund"
Run Code Online (Sandbox Code Playgroud)
我想检测每个声明的字符串中使用的语言.
我们假设已实现函数的签名是:
func detectedLangauge<T: StringProtocol>(_ forString: T) -> String?
Run Code Online (Sandbox Code Playgroud)
如果没有检测到语言,则返回可选字符串.
因此,适当的结果将是:
let englishDetectedLangauge = detectedLangauge(textEN) // => English
let spanishDetectedLangauge = detectedLangauge(textES) // => Spanish
let arabicDetectedLangauge = detectedLangauge(textAR) // => …Run Code Online (Sandbox Code Playgroud) 我们假设我有三组包含扩展:
let photos: Set = ["jpg", "png", "tiff"]
let videos: Set = ["mp4", "mov", "mkv"]
let audios: Set = ["mp3", "wav", "wma"]
Run Code Online (Sandbox Code Playgroud)
和一个简单的枚举:
enum FileType {
case photo, video, audio, unknown
}
Run Code Online (Sandbox Code Playgroud)
现在我想要做的是实现一个函数,该函数FileType根据传递给它的字符串返回选项,哪个集合包含它:
func getType(of file: String) -> FileType {
if photos.contains(file) { return .photo }
if videos.contains(file) { return .video }
if audios.contains(file) { return .audio }
return .unknown
}
Run Code Online (Sandbox Code Playgroud)
它应该按预期工作,但我想知道是否有一种方法将if语句转换为一种switch情况(即使它会改变为逻辑),尤其是在使用枚举时,switch语句是避免错误的更好选择.
如果使用switch声明无法实现,我也会感谢任何优雅的替代方案.
我正在尝试针对Chrome运行我的Selenium测试.当我在本地初始化驱动程序时:
@driver = Selenium::WebDriver.for( :chrome )
Run Code Online (Sandbox Code Playgroud)
一切正常(我已将Chrome二进制文件放在我的PATH上)但是当我尝试远程启动时:
@driver = Selenium::WebDriver.for(:remote, :url => 'http://' + SELENIUM_HOST + port + webdriver_hub, :desired_capabilities => :chrome)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Selenium :: WebDriver :: Error :: UnhandledError:chromedriver可执行文件的路径必须由webdriver.chrome.driver系统属性设置; 有关详细信息,请参阅 http://code.google.com/p/selenium/wiki/ChromeDriver.最新版本可以从http://code.google.com/p/chromium/downloads/list下载 (java.lang.IllegalStateException)
我在那里有点困惑 - 我究竟应该如何设置这个系统属性?我发现这个代码用Java编写:
DesiredCapabilities caps = DesiredCapabilities.chrome();
caps.setJavascriptEnabled(true);
caps.setCapability("chrome.binary", "/path/to/where/chrome/is/installed/chrome.exe");
System.setProperty("webdriver.chrome.driver","/path/to/where/you/ve/put/chromedriver.exe");
ChromeDriver driver = new ChromeDriver(caps);
Run Code Online (Sandbox Code Playgroud)
但我的测试是用Ruby编写的.RubyBindings没有谈论这个问题 http://code.google.com/p/selenium/wiki/RubyBindings
Swift Closure在引用self时会有一个强大的引用循环,如下例所示:
class Test {
var name = "Hello"
func doSomething() {
{() -> Void in
self.name = "otherName"
}()
}
}
Run Code Online (Sandbox Code Playgroud)
在前面的例子中,我创建了一个强大的引用循环,所以我必须修复它:
class Test {
var name = "Hello"
func doSomething() {
{[unowned self] () -> Void in
self.name = "otherName"
}()
}
}
Run Code Online (Sandbox Code Playgroud)
问题:如果我在封闭中引用自我,我是否必须总是使用unowned self或者是否有必须使用的情况weak self?
当我尝试将我的应用程序提交到应用程序商店时,我收到错误:
ERROR ITMS-90685:"CFBundleIdentifier Collision.应用程序ProjectName.app下有多个包含CFBundleIdentifier值com.companyname.projectName的包"
谁能帮我?
解压缩".ipa"文件时,输出为:包含应用程序的Payload目录.但是,有时输出是:Payload,SwiftSupport和Symbols目录.
另外,我注意到SwiftSupport包含.dylib文件,我假设它们已经存在于应用程序中(右键单击 - >显示包内容 - >框架),因此:
我找不到任何有用的参考来描述我正在寻找的东西.
' // MARK: ' 是否有快捷方式的键盘快捷方式,就像标题文档'///描述'一样?