小编Ahm*_*d F的帖子

Swift可选的转义闭包

在此输入图像描述

编译器错误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)

closures optional swift

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

检查是否安装了Google地图 - iOS 10.2.1

我只是将手机升级到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中是否需要一些东西?

ios swift

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

swift NSDate AM和Pm格式

要转换日期和时间,我使用了这个:

 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点没有任何上午或下午.

我怎样才能做到这一点?

谢谢.

date nsdateformatter ios swift

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

如何在iOS中检测文本(字符串)语言?

例如,给定以下字符串:

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)

ios swift nslinguistictagger

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

有没有办法结合开关和包含?

我们假设我有三组包含扩展:

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声明无法实现,我也会感谢任何优雅的替代方案.

if-statement contains switch-statement swift

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

如何为Chrome构建远程Webdriver

我正在尝试针对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

ruby selenium google-chrome webdriver

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

闭包的强参考周期?

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

closures memory-management swift

9
推荐指数
1
解决办法
566
查看次数

错误ITMS-90685:"CFBundleIdentifier碰撞.有多个捆绑"

当我尝试将我的应用程序提交到应用程序商店时,我收到错误:

ERROR ITMS-90685:"CFBundleIdentifier Collision.应用程序ProjectName.app下有多个包含CFBundleIdentifier值com.companyname.projectName的包"

谁能帮我?

xcode app-store ios

9
推荐指数
5
解决办法
6328
查看次数

IPA文件结构 - SupportSwift和符号

解压缩".ipa"文件时,输出为:包含应用程序的Payload目录.但是,有时输出是:Payload,SwiftSupportSymbols目录.

  • 生成SwiftSupportSymbols目录的条件是什么?

另外,我注意到SwiftSupport包含.dylib文件,我假设它们已经存在于应用程序中(右键单击 - >显示包内容 - >框架),因此:

  • 应用程序即使不存在也应该正常工作,生成它们的目的是什么?

我找不到任何有用的参考来描述我正在寻找的东西.

xcode ios ipa swift

9
推荐指数
1
解决办法
2262
查看次数

是否有// MARK的快捷方式:在Xcode中就像/// <#Description#>一样?

' // MARK: ' 是否有快捷方式的键盘快捷方式,就像标题文档'///描述'一样?

xcode code-snippets swift

9
推荐指数
3
解决办法
2926
查看次数