我刚刚经历了一些从Beta3开始显然已经过时的Swift tuts ......
func exchange<T>(data:[T], i:Int, j:Int)
{
let temp = data[i];
data[i] = data[j];
data[j] = temp;
}
Run Code Online (Sandbox Code Playgroud)
游乐场告诉我:
错误:@lvalue $ T8与T不同.
如何更改它以使其工作?
我正在尝试将Xcode 6故事板上的两个不同的视图控制器与链接起来,NSContainerView以便可以有条件地切换它们。不幸的是,这里的本教程没有任何帮助,因为自Xcode以来,情况似乎已发生变化。
因此,我有两个不同的视图控制器,默认情况下其中一个已加载到容器视图中,但是我希望能够以编程方式将第二个视图控制器加载到容器视图中。Xcode 6仅允许在我从一个拖动到另一个时创建嵌入Segues,所以并没有太大帮助。
有人可以告诉我Xcode 6是如何实现的吗?
如何将通过Swift 4 Codable协议编码的JSON对象写入文件?斯威夫特4以前我用过的JSONSerialization.writeJSONObject,但JSONSerialization.isValidJSONObject现在返回false所创建的数据(或字符串).一个例子:
import Foundation
class Shark : Codable
{
var name:String = ""
var carnivorous:Bool = true
var numOfTeeth:Int = 0
var hobbies:[String] = []
}
class JSON
{
class func encode<T:Encodable>(_ obj:T) -> String?
{
if let encodedData = try? JSONEncoder().encode(obj)
{
return String(data: encodedData, encoding: .utf8)
}
return nil
}
class func writeToStream(data:Any, path:String) -> Bool
{
var success = false
if JSONSerialization.isValidJSONObject(data)
{
if let stream = OutputStream(toFileAtPath: "\(path)", append: …Run Code Online (Sandbox Code Playgroud) 我使用离子侧菜单和Angular状态机制使用Ionic进行了基本菜单导航,如http://joelhooks.com/blog/2013/07/22/the-basics-of-using-ui-所述router-with-angularjs /但当加载主页或单击任何菜单项时,页面的中心部分没有显示任何内容.这是简化的HTML ...
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="cordova.js"></script>
<script src="js/app.js"></script>
</head>
<body ng-app="testapp" ng-controller="MainCtrl">
<ion-side-menus>
<!-- Center content -->
<ion-side-menu-content>
<ion-header-bar class="bar-header">
<button class="button button-icon" ng-click="toggleSideMenu()">
<i class="icon ion-navicon"></i>
</button>
<h1 class="title">Home</h1>
<button class="button button-icon">
<i class="icon ion-star"></i>
</button>
</ion-header-bar>
</ion-side-menu-content>
<!-- Left menu -->
<ion-side-menu side="left">
<ion-list>
<ion-item class="item item-icon-left" ng-repeat="item in menuItems" item="item" ng-click="enterState(item.id)">
<i class="{{item.icon}}"></i> …Run Code Online (Sandbox Code Playgroud) 我正在尝试在旋转设备时重新定位弹出窗口视图.我使用此代码创建弹出窗口:
settingsViewCtrl = storyboard.instantiateViewControllerWithIdentifier("settingsViewCtrl") as SettingsViewCtrl;
settingsPopoverCtrl = UIPopoverController(contentViewController: settingsViewCtrl);
settingsPopoverCtrl.delegate = self;
let m:CGFloat = min(view.frame.width, view.frame.height);
let s:CGSize = CGSizeMake(m - 100, m - 100);
let r:CGRect = CGRectMake(view.frame.width * 0.5, view.frame.height * 0.5, 1, 1);
settingsPopoverCtrl.setPopoverContentSize(s, animated: true);
settingsPopoverCtrl.presentPopoverFromRect(r, inView: view, permittedArrowDirections: nil, animated: true);
Run Code Online (Sandbox Code Playgroud)
我willRepositionPopoverToRect在我的代表中使用......
func popoverController(popoverController:UIPopoverController!, willRepositionPopoverToRect rect:UnsafeMutablePointer<CGRect>, inView view:AutoreleasingUnsafeMutablePointer<UIView?>)
{
if (settingsPopoverCtrl != nil && settingsViewCtrl != nil)
{
let r:CGRect = CGRectMake(self.view.frame.width * 0.5, self.view.frame.height * 0.5, 1, 1);
settingsPopoverCtrl.presentPopoverFromRect(r, inView: …Run Code Online (Sandbox Code Playgroud) 在从更新到Beta 7的大量错误中,我得到了这个让我头疼的特别之处......
let views:NSDictionary =
[
"leftView": _leftVC.view,
"rightView": _rightVC.view,
"outerView": _scrollView.superview
];
Run Code Online (Sandbox Code Playgroud)
错误:无法将表达式'type'类型转换为'StringLiteralConvertible'类型需要'views'的方法需要一个NSDictionary,所以我不能只使用Swift Dictionary.
我如何调整上述代码以满足Xcode6 Beta7?
我想制作一些Swift文件模板,我可以将其放入Xcode的文件模板选择器中.我知道如何使一个自定义模板,游乐场和对象 - 文件模板,但对于斯威夫特似乎有没有可用的文件模板都在以下路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source/
Run Code Online (Sandbox Code Playgroud)
这肯定应该是可能的,不应该吗?(或者每个应用程序开发人员都使用可怕的默认模板开始?)
我在路径下创建了一个新的模板文件夹
/Users/name/Library/Developer/Xcode/Templates/File Templates/User Templates
Run Code Online (Sandbox Code Playgroud)
名称Swift File.xctemplate和以下内容:
___FILEBASENAME___.swift
TemplateIcon.png
TemplateIcon@2x.png
TemplateInfo.plist
Run Code Online (Sandbox Code Playgroud)
当然还是相应地编辑了文件.当我打开Xcode的寺庙选择器时,我的模板出现但它不知何故无法正常工作.它还会打开一个文件浏览器并询问存储不正确的文件的位置,然后该文件不会出现在项目中.
这有什么解决方案吗?网络似乎没有这些信息.
我在一个项目中有一些全局常量:
// DemoACIs.swift
let DEMO_TEST_MENU_SCREEN_VIEW_ACI = "test_menu_screen_view"
let DEMO_TEST_MENU_SCREEN_TITLE_LABEL_ACI = "test_menu_screen_title_label"
let DEMO_TEST_MENU_SCREEN_BUTTON1_ACI = "test_menu_screen_button1"
etc.
Run Code Online (Sandbox Code Playgroud)
我想在Xcode的另一个基于Swift的目标(在这种情况下为UI测试目标)中引用它们...
// TestMenuScreenViewProxy.swift
import Foundation
import XCTest
class TestMenuScreenViewProxy
{
internal var view:XCUIElement { return app.otherElements[DEMO_TEST_MENU_SCREEN_VIEW_ACI] }
internal var titleLabel:XCUIElement { return app.textFields[DEMO_TEST_MENU_SCREEN_TITLE_LABEL_ACI] }
internal var button1:XCUIElement { return app.buttons[DEMO_TEST_MENU_SCREEN_BUTTON1_ACI] }
}
Run Code Online (Sandbox Code Playgroud)
当然这是行不通的。在测试目标中找不到常数。我如何才能在目标中访问它们?
在 Cocoa UI 控件中,我们有NSComboBox,我想知道是否可以将其设置为像 Apple 在 OSX 系统偏好设置中使用的“组合框”一样。这些是完全可点击的(而不仅仅是最右边的箭头部分),并且它们的外观和行为也略有不同(例如,它们延伸到底部和顶部)。
是否可以NSComboBox更改为这样的行为,或者这是苹果在那里使用的完全不同的控件?
我正在围绕XCTest编写一个可重用的框架,用于我们的几个项目的UI测试.为此,我创建了一个Cocoa Touch Framework项目,我想通过pod分享.
是否可以将XCTest包含在这样的项目中(没有额外的测试目标)?即使我已经XCTest.framework在构建阶段进行链接,我也会收到无法找到XCTest模块的错误.