菜鸟求问,IOS和SWIFT的疑问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸟求问,IOS和SWIFT的疑问相关的知识,希望对你有一定的参考价值。

菜鸟自学做了一些ios简单的UI功能

目前对OC和SWIFT 这2种语言 有些疑惑

OC 和 swift 它们2个的区别到底是什么

到底是怎么一个分工

哪位大牛 可以 帮忙 解答下?

请尽量讲的仔细些

常量与变量声明
oc的变量声明使用 类型 变量名 = 变量值的方式,其中类型为系统内置数据类型或自定义类型,变量名需由英文字母开头且不能包含特殊字符
swift变量声明使用 var 变量名 = 变量值的方式,其中变量名可以使用任何你喜欢的字符,甚至是表情符号emoji等
oc常量声明使用const放在变量定义前即为声明常量,如:const NSString *str = @"Hello";
swift常量声明使用 let 常量名 = 常量值的方式,同样可以使用任何你喜欢的字符作为常量名

swift 可以自动推断出常量与变量的数据类型,当然也可以使用“:数据类型”的方式指定其具体数据类型,如 let age:Int = 10
PS:swift严格要求变量在使用前必须进行初始化,如上所示,必须给定变量值,而oc则不强制
5.整数
swift提供了8、16、32、64位有符号和无符号整数,如UInt8、Int64等,每一种类型都有一个min和max可调用,如UInt8.min、UInt8.max等。
6.浮点数
swift浮点数可以用十进制和十六进制2种进制来表示
十进制:let d1=12.5或let d2=0.125e2 后缀e2代表e前面部分乘以10的2次方
十六进制:let d3=0xC.8p0 0x前缀表示后面是十六进制,p0代表前面整个数字乘以2的0次方 且指数部分(px)必须存在
7.数字格式
swift中允许在数字中间加入符号_,以增加可读性,并不会影响原来数据,如 let money = 100_0000 还是表示100000
swift中还允许在数字前面加入0,以增加可读性,并不会影响原来数据,如 let money = 001_000_000还是表示1000000
而这些在oc中是不允许的
8.字符串
oc中使用@""来表示字符串
swift使用""来表示字符串,拼接字符串直接使用+将两个字符串或字符串变量进行拼接运算即可,如var str1="abc";var str2="def";var str3=str1+str2;
oc使用stringFormat方法进行字符串格式化,可以将其他非字符串值插入字符串中进行格式化
swift使用“/()”将其它非字符串插入字符串中,如:let hand=2;var age=20;let str="我今年/(age)岁了,有/(hand)只手",也可以使用String(age)进行转换,并用+进行字符串拼接,如let str="我今年"+String(age)+"岁了,有"+String(hand)+"只手"
9.数据类型转换
swift类型转换使用“数据类型(原数据)”进行类型转换,如let money1=100;let money2=50.5;let totalMoney=Double(money1)+money2;
10.运算符
oc赋值运算符返回该变量值,如 int a = 0;int b = a = 10;其实a=10返回10赋值给了b
swift赋值运算符没有返回值

oc求模运算只支持整数求模运算
swift求模运算支持浮点数求模运算,如8%2.5=0.5,因为8=2.5*3+0.5

oc中bool有两个值 YES NO 其实根本0为假,非0都代表真
swift中bool有两个值false true 且只有false和true 0与非0在任何场合都不代表bool值,比如if(10)这种写法是错的

swift 比oc中多几种运算符
10.1闭合范围运算符
a...b [a,b]包含a,b
a..<b [a,b)包含a,不包含b
如for i in 0..<5
  printfln(i)

10.2溢出运算符
swift为整型计算提供了5个&开头的溢出运算符
&+ 溢出加
&- 溢出减
&* 溢出乘
&/ 溢出除
&% 溢出求模
如 let x = UInt8.max //x=255
let y = x &+1 //y=0
如 let x = UInt8.min //x=0
let y = y &- 1 //y=255

Objective C中的写法

TwoViewController *v = [[TwoViewController alloc] init]; //这样会把TwoViewController默认关联到TwoViewController.xib上
//等同调用了方法
TwoViewController *v = [[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];

Swift中的写法

let v = TwoViewController() //不会关联TwoViewController.xib文件
//一定要指定xib文件
let v = TwoViewController(nibName: "TwoViewController", bundle: nil)

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:凌零
链接:http://www.zhihu.com/question/25266901/answer/31047276
来源:知乎

我应该先学C/Objective-C还是直接学Swift?Swift是一个全新的语言,与Objective-C或C都没有任何关系。我的意思是它们都是编程语言并且遵守一些基础概念和范例,但是你并不需要在学习其中一个之前先学另一个。即使你是编程新手,你也可以学习苹果发布的官方的Swift文档(中文版)而无需先学Objective-C。我正在学习Objective-C,我应该转为学Swift吗?这要试情况而定。如果你把学习iOS当做一个爱好或者出于好奇心才学,那么转到Swift学习上吧。如果你将从事iOS开发视为职业,那么你要知道外面至少有100万个应用都是用Objective-C编写的,Swift于2014年才刚刚发布,所以你将来的职业的app开发仍然很有可能使用Objective-C。所以你需要学习Objective-C来获得一个工作,直到Swift成为标准,这大概将花费数年时间。同时学习两门语言也将对你有好处。你未来的上司甚至可能会让你来将现存的Objective-C app切换到Swift上。不过我对这个观点有所保留,因为一个应用最重要的部分是它的功能而非它使用的语言,因此重写现有app的做法可能不会流行。我建议初学者选择Swift是因为它是一种友好的语言,并且感谢playground让它变得容易学会。一旦你学过了Swift,如果将iOS开发视为职业的话,对于学习Objective-C也将更容易理解。最后,Swift是一种现代语言,如果你学习Swift,意味着也同时做好了面向未来的准备,因为Swift将是新一代的应用所用的语言(包括Apple Watch上的应用)。Swift语言是苹果送给每个人的礼物。世界上还没有5年经验的Swift开发者,但如果你现在开始学习Swift,那么过了5年你就将成为其中一位了。我最后的建议是,不管你选择哪一门语言,学习它并且精通它。最后你将发现,只要你学会iOS SDK,使用哪种语言并不是最重要的。并且学了一种语言之后可以很容易的开始学习另一门,最紧要的是,从现在就开始学习。
参考技术A 我也不算很了解swift。讲讲我的理解。
最开始iOS的开发语言是OC,近两年才开始推出/推广swift。
之前的程序都是用OC开发的,所以你即使学习swift,现在出去找工作,为了要维护原来的程序,OC也是不需要懂的。
swift号称很强大,OC能做的事情他都能做,OC不能做的,他也能做--比如开发一个操作系统;
swift你可以理解为是苹果打算用来替换OC的语言,但是因为OC根深蒂固,三五年内也不可能完全灭绝。
swift和OC可以混合编程,也就是你在同一个项目中,既可以有.swift文件,也可以有.m文件,相互间可以引用。swift,是一种趋势。追问

晚上有时间的话,能在补充些吗?

本回答被提问者和网友采纳

ios swift模型结构与领域数据库

【中文标题】ios swift模型结构与领域数据库【英文标题】:ios swift models structure with realm database 【发布时间】:2017-11-24 08:48:07 【问题描述】:

我正在开发我的 iOs 应用程序并且我正在使用 Realm 数据库。由于我对 ios 开发(也是 swift 和 xcode)完全陌生,所以我对结构化数据有疑问(我已经阅读了一些通用的项目结构指南,但找不到答案)。我的想法与 Java 结构有关

对于 Realm 数据库 (RealmSiwft),我创建了一个这样的模型:

@objcMembers class Patient: Object 
    dynamic var patientId:Int = 0
    dynamic var refNumber:String = ""

    convenience init(id:Int, refNumber:String)
       self.init()
       self.patinetID = id
       self.refNumber = refNumber
    

现在,它看起来就像 Java 中的 POJO 类。但据我所知,这种模型结构是这样制作的,因此它可以使用 Realm。

所以问题是,如果我需要在我的项目中的其他地方使用 Patient 对象,这个 Realm-POJO-model 好用吗?我的意思是,即使我不需要对它进行数据库操作,我是否应该像普通模型一样使用它?或者我应该让这个 Realm 模型类似于 DAO 类来进行数据库操作,并在我想在不使用数据库的情况下使用 Patient 时创建另一个模型类,比如 Patient.swift(我希望不会,因为它有很多代码重复)

如果我需要该患者模型中不会存储在数据库中的变量怎么办?我可以在没有动态的情况下制作它吗?那么 init 比呢?这让我大吃一惊,就我学习 swift 而言,它看起来如此丑陋和非结构化,或者我还不能切换到它......

【问题讨论】:

检查更新的答案,并给出正常的评论而不是减号。人们试图帮助你。 好吧,我没有给任何人减分。为什么我有减分呢?我什至没有足够的声誉来给缺点男人 这也不是我的。有人不喜欢你的问题和我的回答;) ehh.. 对我来说你的回答很有帮助:) 顺便说一句。我试图在 swift 中寻找一个更大的示例项目,它具有适当的文件结构(带有模型等),如 e.x. java 项目)并且找不到好的.. 我发现的所有示例都是混乱且如此不干净.. swift 是一种类型的语言“当你在一个类中需要它时,即使它的重复代码也能做到”? 查看本教程:raywenderlich、appcoda、off doc。我在网上搜索的所有其他信息,并在宠物项目中尝试了不同的可能变体和解决方案。 【参考方案1】:

如果我需要在项目中的其他地方使用 Patient 对象,这是 Realm-POJO-model 好用吗? 即使我不需要对其进行数据库操作?

您可以使用您的 Patient 对象而无需保存到数据库,将它们移动到不同的控制器等等。

如果我需要该患者模型中不会存储的变量怎么办 在数据库中?

查看ignoredProperties() 方法。

我可以在没有动态的情况下制作它吗?

不可以,因为 Realm 基于 Objective-C 对象,所以这是必需的类型。

init 比呢?

您可以创建不同的构造函数方法,查看Initialization 文档。如果使用 Realm,您应该为注意到的变量设置值(如果您不给它们默认属性值)

你的班级应该是这样的:

class Patient: Object 

    // MARK: - Properties
    @objc dynamic var patientId: Int = 0
    @objc dynamic var refNumber: String = ""

    // MARK: - Meta
    // to set the model’s primary key
    override class func primaryKey() -> String? 
        return "patientId"
    

    //Ignoring properties
    override static func ignoredProperties() -> [String] 
       return ["tmpID"]
    

    //It's ok
    convenience init(id:Int, refNumber:String)
        self.init()
        self.patientId = id
        self.refNumber = refNumber
    

您可以在以下位置找到所有其他详细信息:realm docs

您还可以使用 swift 扩展来扩展基本代码:

extension Patient 
    var info: String 
        return "\(patientId) " + refNumber
    

    func isAvailableRefNumber() -> Bool 
        return refNumber.length > 6
    

【讨论】:

感谢您的回答。关于那个缺点 - 那不是我

以上是关于菜鸟求问,IOS和SWIFT的疑问的主要内容,如果未能解决你的问题,请参考以下文章

swift的惊喜与疑问

自问自答关于 Swift 的几个疑问

我对呼叫目录处理程序扩展 Swift 3 CallKit 有疑问

自问自答关于 Swift 的几个疑问

自问自答关于 Swift 的几个疑问

关于虚拟机与宿主机同网段主机互ping的一点疑问